wiki-grav/plugins/git-sync/js/app.js
2022-04-24 14:32:58 +02:00

196 lines
76 KiB
JavaScript

/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
/******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ 849:
/***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => {
eval("\n;// CONCATENATED MODULE: external \"GitSync\"\nconst external_GitSync_namespaceObject = GitSync;\nvar external_GitSync_default = /*#__PURE__*/__webpack_require__.n(external_GitSync_namespaceObject);\n// EXTERNAL MODULE: external \"jQuery\"\nvar external_jQuery_ = __webpack_require__(609);\nvar external_jQuery_default = /*#__PURE__*/__webpack_require__.n(external_jQuery_);\n// EXTERNAL MODULE: ../../../grav/grav-plugin-admin/themes/grav/node_modules/toastr/toastr.js\nvar toastr = __webpack_require__(860);\nvar toastr_default = /*#__PURE__*/__webpack_require__.n(toastr);\n;// CONCATENATED MODULE: ../../../grav/grav-plugin-admin/themes/grav/app/utils/toastr.js\n\n(toastr_default()).options.positionClass = 'toast-top-right';\n(toastr_default()).options.preventDuplicates = true;\n/* harmony default export */ const utils_toastr = ((toastr_default()));\n;// CONCATENATED MODULE: ../../../grav/grav-plugin-admin/themes/grav/app/utils/offline.js\n\n\nvar offlineElement = external_jQuery_default()('#offline-status');\nexternal_jQuery_default()(window).on('offline', function () {\n offlineElement.slideDown();\n});\nexternal_jQuery_default()(window).on('online', function () {\n offlineElement.slideUp();\n});\nexternal_jQuery_default()(document).ready(function () {\n if (!offline) {\n offlineElement.slideDown();\n }\n}); // assume online if can't check\n\n/* harmony default export */ const offline = (typeof __webpack_require__.g.navigator.onLine !== 'undefined' ? __webpack_require__.g.navigator.onLine : true);\n;// CONCATENATED MODULE: external \"GravAdmin\"\nconst external_GravAdmin_namespaceObject = GravAdmin;\n// EXTERNAL MODULE: ../../../grav/grav-plugin-admin/themes/grav/node_modules/mout/string/trim.js\nvar trim = __webpack_require__(284);\nvar trim_default = /*#__PURE__*/__webpack_require__.n(trim);\n;// CONCATENATED MODULE: ../../../grav/grav-plugin-admin/themes/grav/app/utils/response.js\n\n\n\n\n\nvar UNLOADING = false;\n\nvar error = function error(response) {\n var error = new Error(response.statusText || response || '');\n error.response = response;\n return error;\n};\n\nfunction parseStatus(response) {\n return response;\n /* Whoops can handle JSON responses so we don't need this for now.\n if (response.status >= 200 && response.status < 300) {\n return response;\n } else {\n throw error(response);\n }\n */\n}\nfunction parseJSON(response) {\n return response.text().then(function (text) {\n var parsed = text;\n\n try {\n parsed = JSON.parse(text);\n } catch (error) {\n var content = document.createElement('div');\n content.innerHTML = text;\n var the_error = new Error();\n the_error.stack = trim_default()(content.innerText);\n throw the_error;\n }\n\n return parsed;\n });\n}\nfunction userFeedback(response) {\n if (UNLOADING) {\n return true;\n }\n\n var status = response.status || (response.error ? 'error' : '');\n var message = response.message || (response.error ? response.error.message : null);\n var settings = response.toastr || null;\n var backup;\n\n switch (status) {\n case 'unauthenticated':\n document.location.href = external_GravAdmin_namespaceObject.config.base_url_relative;\n throw error('Logged out');\n\n case 'unauthorized':\n status = 'error';\n message = message || 'Unauthorized.';\n break;\n\n case 'error':\n status = 'error';\n message = message || 'Unknown error.';\n break;\n\n case 'success':\n status = 'success';\n message = message || '';\n break;\n\n default:\n status = 'error';\n message = message || 'Invalid AJAX response.';\n break;\n }\n\n if (settings) {\n backup = Object.assign({}, utils_toastr.options);\n Object.keys(settings).forEach(function (key) {\n utils_toastr.options[key] = settings[key];\n });\n }\n\n if (message && (offline || !offline && status !== 'error')) {\n utils_toastr[status === 'success' ? 'success' : 'error'](message);\n }\n\n if (settings) {\n utils_toastr.options = backup;\n }\n\n return response;\n}\nfunction userFeedbackError(error) {\n if (UNLOADING) {\n return true;\n }\n\n var stack = error.stack ? \"<pre><code>\".concat(error.stack, \"</code></pre>\") : '';\n utils_toastr.error(\"Fetch Failed: <br /> \".concat(error.message, \" \").concat(stack));\n console.error(\"\".concat(error.message, \" at \").concat(error.stack));\n}\nexternal_jQuery_default()(__webpack_require__.g).on('beforeunload._ajax', function () {\n UNLOADING = true;\n});\n;// CONCATENATED MODULE: ../../../grav/grav-plugin-admin/themes/grav/app/utils/request.js\n\n\nvar raw;\n\nvar request = function request(url) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {\n return true;\n };\n\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n if (options.method && options.method === 'post') {\n var data = new FormData();\n options.body = Object.assign({\n 'admin-nonce': external_GravAdmin_namespaceObject.config.admin_nonce\n }, options.body || {});\n Object.keys(options.body).map(function (key) {\n return data.append(key, options.body[key]);\n });\n options.body = data;\n }\n\n options = Object.assign({\n credentials: 'same-origin',\n headers: {\n 'Accept': 'application/json'\n }\n }, options);\n return fetch(url, options).then(function (response) {\n raw = response;\n return response;\n }).then(parseStatus).then(parseJSON).then(userFeedback).then(function (response) {\n return callback(response, raw);\n })[\"catch\"](userFeedbackError);\n};\n\n/* harmony default export */ const utils_request = (request);\n// EXTERNAL MODULE: ./node_modules/whatwg-fetch/fetch.js\nvar whatwg_fetch_fetch = __webpack_require__(147);\n;// CONCATENATED MODULE: ./app/wizard/index.js\n\n\n\n\n\n\nvar GIT_REGEX = /(?:git|ssh|https?|git@[-\\w.]+):(\\/\\/)?(.*?)(\\.git)(\\/?|\\#[-\\d\\w._]+?)$/;\nvar WIZARD = external_jQuery_default()('[data-remodal-id=\"wizard\"]');\nvar RESET_LOCAL = external_jQuery_default()('[data-remodal-id=\"reset-local\"]');\nvar SERVICES = {\n 'github': 'github.com',\n 'bitbucket': 'bitbucket.org',\n 'gitlab': 'gitlab.com',\n 'allothers': 'allothers.repo'\n};\nvar BRANCHES = {\n 'github': 'main',\n 'bitbucket': 'master',\n 'gitlab': 'master',\n 'allothers': 'master'\n};\nvar TEMPLATES = {\n REPO_URL: 'https://{placeholder}/getgrav/grav.git'\n};\n\nvar openWizard = function openWizard() {\n var modal = WIZARD.remodal({\n closeOnConfirm: false\n });\n var previous = WIZARD.find('[data-gitsync-action=\"previous\"]');\n var next = WIZARD.find('[data-gitsync-action=\"next\"]');\n var save = WIZARD.find('[data-gitsync-action=\"save\"]');\n STEP = 0;\n WIZARD.find(\"form > [class^=step-]:not(.step-\".concat(STEP, \") > .panel\")).hide().removeClass('hidden');\n WIZARD.find(\"form > [class=\\\"step-\".concat(STEP, \"\\\"] > .panel\")).show();\n next.removeClass('hidden');\n previous.addClass('hidden');\n save.addClass('hidden');\n var webhook = external_jQuery_default()('[name=\"data[webhook]\"]').val();\n var webhook_secret = external_jQuery_default()('[name=\"data[webhook_secret]\"]').val();\n external_jQuery_default()('[name=\"gitsync[repository]\"]').trigger('change');\n external_jQuery_default()('[name=\"gitsync[webhook]\"]').val(webhook);\n external_jQuery_default()('[name=\"gitsync[webhook_secret]\"]').val(webhook_secret);\n external_jQuery_default()('.gitsync-webhook').text(webhook);\n modal.open();\n};\n\nvar disableButton = function disableButton(next) {\n next.attr('disabled', 'disabled').addClass('hint--top');\n};\n\nvar enableButton = function enableButton(next) {\n next.attr('disabled', null).removeClass('hint--top');\n};\n\nvar STEP = 0;\nvar STEPS = 0;\nvar SERVICE = null;\nexternal_jQuery_default()(document).on('closed', WIZARD, function (e) {\n STEP = 0;\n});\nexternal_jQuery_default()(document).on('click', '[data-gitsync-useraction]', function (event) {\n event.preventDefault();\n var target = external_jQuery_default()(event.target).closest('[data-gitsync-useraction]');\n var action = target.data('gitsyncUseraction');\n var URI = \"\".concat(external_GravAdmin_namespaceObject.config.current_url, \".json\");\n\n switch (action) {\n case 'wizard':\n openWizard();\n break;\n\n case 'sync':\n var relativeURI = target.data('gitsync-uri');\n target.find('i').removeClass('fa-cloud fa-git').addClass('fa-circle-o-notch fa-spin');\n utils_request(relativeURI || URI, {\n method: 'post',\n body: {\n task: 'synchronize'\n }\n }, function () {\n target.find('i').removeClass('fa-circle-o-notch fa-spin').addClass(relativeURI ? 'fa-git' : 'fa-cloud');\n });\n break;\n\n case 'reset':\n var modal = RESET_LOCAL.remodal({\n closeOnConfirm: false\n });\n modal.open();\n\n if (!RESET_LOCAL.data('_reset_event_set_')) {\n RESET_LOCAL.find('[data-gitsync-action=\"reset-local\"]').one('click', function () {\n modal.close();\n RESET_LOCAL.data('_reset_event_set_', true);\n target.find('i').removeClass('fa-history').addClass('fa-circle-o-notch fa-spin');\n utils_request(URI, {\n method: 'post',\n body: {\n task: 'resetlocal'\n }\n }, function () {\n RESET_LOCAL.data('_reset_event_set_', false);\n target.find('i').removeClass('fa-circle-o-notch fa-spin').addClass('fa-history');\n });\n });\n }\n\n break;\n }\n});\nexternal_jQuery_default()(document).on('click', '[data-gitsync-action]', function (event) {\n event.preventDefault();\n var target = external_jQuery_default()(event.target).closest('[data-gitsync-action]');\n var previous = WIZARD.find('[data-gitsync-action=\"previous\"]');\n var next = WIZARD.find('[data-gitsync-action=\"next\"]');\n var save = WIZARD.find('[data-gitsync-action=\"save\"]');\n var action = target.data('gitsyncAction');\n var user = external_jQuery_default()('[name=\"gitsync[repo_user]\"]').val();\n var noUser = external_jQuery_default()('[name=\"gitsync[no_user]\"]').is(':checked');\n var password = external_jQuery_default()('[name=\"gitsync[repo_password]\"]').val();\n var repository = external_jQuery_default()('[name=\"gitsync[repo_url]\"]').val();\n var branch = external_jQuery_default()('[name=\"gitsync[branch]\"]').val();\n var webhook = external_jQuery_default()('[name=\"gitsync[webhook]\"]').val();\n var webhook_enabled = external_jQuery_default()('[name=\"gitsync[webhook_enabled]\"]').is(':checked');\n var webhook_secret = external_jQuery_default()('[name=\"gitsync[webhook_secret]\"]').val();\n\n if (target.attr('disabled')) {\n return;\n }\n\n var error = [];\n\n if (!user && !noUser) {\n error.push('Username is missing.');\n }\n /*\n if (!password) {\n error.push('Password is missing.');\n }\n */\n\n\n if (!repository) {\n error.push('Repository is missing.');\n }\n\n if (['save', 'test'].includes(action)) {\n target.find('.fa').removeClass(action === 'test' ? 'fa-plug' : 'fa-check').addClass('fa-spin fa-circle-o-notch');\n\n if (error.length) {\n utils_toastr.error(error.join('<br />'));\n target.find('.fa').removeClass('fa-spin fa-circle-o-notch').addClass(action === 'test' ? 'fa-plug' : 'fa-check');\n return false;\n }\n }\n\n if (action === 'save') {\n var folders = external_jQuery_default()('[name=\"gitsync[folders]\"]:checked').map(function (i, item) {\n return item.value;\n });\n external_jQuery_default()('[name=\"data[repository]\"]').val(repository);\n external_jQuery_default()('[name=\"data[no_user]\"]').val(noUser ? '1' : '0');\n external_jQuery_default()('[name=\"data[user]\"]').val(user);\n external_jQuery_default()('[name=\"data[password]\"]').val(password);\n external_jQuery_default()('[name=\"data[branch]\"]').val(branch);\n external_jQuery_default()('[name=\"data[remote][branch]\"]').val(branch);\n external_jQuery_default()('[name=\"data[webhook]\"]').val(webhook);\n external_jQuery_default()(\"[name=\\\"data[webhook_enabled]\\\"][value=\\\"\".concat(webhook_enabled ? 1 : 0, \"\\\"]\")).prop('checked', true);\n external_jQuery_default()('[name=\"data[webhook_secret]\"]').val(webhook_secret);\n var dataFolders = external_jQuery_default()('[name=\"data[folders][]\"]');\n\n if (dataFolders && dataFolders[0] && dataFolders[0].selectize) {\n dataFolders[0].selectize.setValue(folders.toArray());\n }\n\n external_jQuery_default()('[name=\"task\"][value=\"save\"]').trigger('click');\n return false;\n }\n\n if (action === 'test') {\n var URI = \"\".concat(external_GravAdmin_namespaceObject.config.current_url, \".json\");\n var test = __webpack_require__.g.btoa(JSON.stringify({\n user: noUser ? '' : user,\n password: password,\n repository: repository,\n branch: branch\n }));\n utils_request(URI, {\n method: 'post',\n body: {\n test: test,\n task: 'testConnection'\n }\n });\n target.find('.fa').removeClass('fa-spin fa-circle-o-notch').addClass('fa-plug');\n return false;\n }\n\n WIZARD.find(\".step-\".concat(STEP, \" > .panel\")).slideUp();\n STEP += action === 'next' ? +1 : -1;\n WIZARD.find(\".step-\".concat(STEP, \" > .panel\")).slideDown();\n save.addClass('hidden');\n\n if (action === 'next') {\n previous.removeClass('hidden');\n }\n\n if (STEP <= 0) {\n previous.addClass('hidden');\n enableButton(next);\n }\n\n if (STEP > 0) {\n next.removeClass('hidden');\n }\n\n if (STEP === 1) {\n var selectedRepo = external_jQuery_default()('[name=\"gitsync[repository]\"]:checked');\n\n if (!selectedRepo.length) {\n disableButton(next);\n } else {\n enableButton(next);\n }\n }\n\n if (STEP === 2) {\n var repoURL = external_jQuery_default()('[name=\"gitsync[repo_url]\"]').val();\n\n if (!repoURL.length || !branch) {\n disableButton(next);\n } else {\n enableButton(next);\n }\n }\n\n if (STEP === STEPS) {\n next.addClass('hidden');\n previous.removeClass('hidden');\n save.removeClass('hidden');\n }\n});\nexternal_jQuery_default()(document).on('input', '[name=\"gitsync[no_user]\"]', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var user = external_jQuery_default()('[name=\"gitsync[repo_user]\"]');\n\n if (target.is(':checked')) {\n user.val('').prop('disabled', 'disabled').attr('placeholder', '<username not required>');\n } else {\n user.prop('disabled', null).attr('placeholder', 'Username, not email');\n }\n});\nexternal_jQuery_default()(document).on('change', '[name=\"gitsync[repository]\"]', function () {\n enableButton(WIZARD.find('[data-gitsync-action=\"next\"]'));\n});\nexternal_jQuery_default()(document).on('input', '[name=\"gitsync[repo_url]\"]', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var value = target.val();\n var isGitURL = GIT_REGEX.test(value);\n var next = WIZARD.find('[data-gitsync-action=\"next\"]');\n target.removeClass('invalid');\n\n if (!isGitURL) {\n target.addClass('invalid');\n }\n\n if (isGitURL && value.length) {\n enableButton(next);\n } else {\n disableButton(next);\n }\n});\nexternal_jQuery_default()(document).on('keyup', '[data-gitsync-uribase] [name=\"gitsync[webhook]\"]', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var value = target.val();\n external_jQuery_default()('.gitsync-webhook').text(value);\n});\nexternal_jQuery_default()(document).on('keyup', '[data-gitsync-uribase] [name=\"gitsync[webhook_secret]\"]', function (event) {\n external_jQuery_default()('[data-gitsync-uribase] [name=\"gitsync[webhook_enabled]\"]').trigger('change');\n});\nexternal_jQuery_default()(document).on('change', '[data-gitsync-uribase] [name=\"gitsync[webhook_enabled]\"]', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var checked = target.is(':checked');\n var secret = external_jQuery_default()('[name=\"gitsync[webhook_secret]\"]').val();\n target.closest('.webhook-secret-wrapper').find('label:last-child')[checked ? 'removeClass' : 'addClass']('hidden');\n external_jQuery_default()('.gitsync-webhook-secret').html(!checked || !secret.length ? '<em>leave empty</em>' : \"<code>\".concat(secret, \"</code>\"));\n});\nexternal_jQuery_default()(document).on('change', '[name=\"gitsync[repository]\"]', function (event) {\n var target = external_jQuery_default()(event.target);\n\n if (!target.is(':checked')) {\n return;\n }\n\n SERVICE = target.val();\n Object.keys(SERVICES).forEach(function (service) {\n WIZARD.find(\".hidden-step-\".concat(service))[service === SERVICE ? 'removeClass' : 'addClass']('hidden');\n\n if (service === SERVICE) {\n WIZARD.find('.webhook-secret-wrapper')[service === 'bitbucket' ? 'addClass' : 'removeClass']('hidden');\n WIZARD.find('input[name=\"gitsync[repo_url]\"][placeholder]').attr('placeholder', TEMPLATES.REPO_URL.replace(/\\{placeholder\\}/, SERVICES[service])).end().find('input[name=\"gitsync[branch]\"]').attr('placeholder', BRANCHES[service]).val(BRANCHES[service]);\n }\n });\n});\nexternal_jQuery_default()(document).on('click', '[data-access-tokens-details]', function (event) {\n event.preventDefault();\n var button = external_jQuery_default()(event.currentTarget);\n var panel = button.closest('.access-tokens').find('.access-tokens-details');\n panel.slideToggle(250, function () {\n var isVisible = panel.is(':visible');\n var icon = button.find('.fa');\n icon.removeClass('fa-chevron-down fa-chevron-up').addClass(\"fa-chevron-\".concat(isVisible ? 'up' : 'down'));\n });\n});\n\nvar showNotices = function showNotices(element) {\n var target = external_jQuery_default()(element);\n var selection = target.val().replace(/\\//g, '-');\n var column = target.closest('.columns').find('.column:last');\n column.find('[class*=\"description-\"]').addClass('hidden');\n column.find(\".description-\".concat(selection)).removeClass('hidden').hide().fadeIn({\n duration: 250\n });\n};\n\nexternal_jQuery_default()(document).on('input', '[data-remodal-id=\"wizard\"] .step-4 input[type=\"checkbox\"]', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n\n if (!target.is(':checked')) {\n return;\n }\n\n showNotices(target);\n});\nexternal_jQuery_default()(document).on('mouseenter', '[data-remodal-id=\"wizard\"] .step-4 .info-desc', function (event) {\n var target = external_jQuery_default()(event.currentTarget).siblings('input[type=\"checkbox\"]');\n showNotices(target);\n});\nexternal_jQuery_default()(document).on('mouseleave', '[data-remodal-id=\"wizard\"] .step-4 label', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var container = target.closest('.columns');\n var column = container.find('.column:last-child');\n column.find('[class*=\"description-\"]').addClass('hidden');\n});\nexternal_jQuery_default()(document).on('mouseleave', '[data-remodal-id=\"wizard\"] .columns .column:first-child', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var column = target.siblings('.column');\n column.find('[class*=\"description-\"]').addClass('hidden');\n});\nexternal_jQuery_default()(document).ready(function () {\n STEPS = WIZARD.find('[class^=\"step-\"]').length - 1;\n WIZARD.wrapInner('<form></form>');\n RESET_LOCAL.wrapInner('<form></form>');\n\n if (WIZARD.length && ((external_GitSync_default()).first_time || !(external_GitSync_default()).git_installed)) {\n openWizard();\n }\n});\n/* harmony default export */ const wizard = ((/* unused pure expression or super */ null && (Settings)));\n;// CONCATENATED MODULE: ./app/main.js\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90cmlsYnktZ3Jhdi1wbHVnaW4tZ2l0c3luYy9leHRlcm5hbCBcIkdpdFN5bmNcIj9jNTkxIiwid2VicGFjazovL3RyaWxieS1ncmF2LXBsdWdpbi1naXRzeW5jLy4uL2dyYXYvZ3Jhdi1wbHVnaW4tYWRtaW4vdGhlbWVzL2dyYXYvYXBwL3V0aWxzL3RvYXN0ci5qcz8zMTZmIiwid2VicGFjazovL3RyaWxieS1ncmF2LXBsdWdpbi1naXRzeW5jLy4uL2dyYXYvZ3Jhdi1wbHVnaW4tYWRtaW4vdGhlbWVzL2dyYXYvYXBwL3V0aWxzL29mZmxpbmUuanM/YmNkYyIsIndlYnBhY2s6Ly90cmlsYnktZ3Jhdi1wbHVnaW4tZ2l0c3luYy9leHRlcm5hbCBcIkdyYXZBZG1pblwiP2M2ZWIiLCJ3ZWJwYWNrOi8vdHJpbGJ5LWdyYXYtcGx1Z2luLWdpdHN5bmMvLi4vZ3Jhdi9ncmF2LXBsdWdpbi1hZG1pbi90aGVtZXMvZ3Jhdi9hcHAvdXRpbHMvcmVzcG9uc2UuanM/MWRmYSIsIndlYnBhY2s6Ly90cmlsYnktZ3Jhdi1wbHVnaW4tZ2l0c3luYy8uLi9ncmF2L2dyYXYtcGx1Z2luLWFkbWluL3RoZW1lcy9ncmF2L2FwcC91dGlscy9yZXF1ZXN0LmpzPzhiZDEiLCJ3ZWJwYWNrOi8vdHJpbGJ5LWdyYXYtcGx1Z2luLWdpdHN5bmMvLi9hcHAvd2l6YXJkL2luZGV4LmpzP2JjYjciXSwibmFtZXMiOlsidG9hc3RyIiwib2ZmbGluZUVsZW1lbnQiLCIkIiwid2luZG93Iiwib24iLCJzbGlkZURvd24iLCJzbGlkZVVwIiwiZG9jdW1lbnQiLCJyZWFkeSIsImlzT25saW5lIiwiZ2xvYmFsIiwibmF2aWdhdG9yIiwib25MaW5lIiwiVU5MT0FESU5HIiwiZXJyb3IiLCJyZXNwb25zZSIsIkVycm9yIiwic3RhdHVzVGV4dCIsInBhcnNlU3RhdHVzIiwicGFyc2VKU09OIiwidGV4dCIsInRoZW4iLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJjb250ZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsInRoZV9lcnJvciIsInN0YWNrIiwidHJpbSIsImlubmVyVGV4dCIsInVzZXJGZWVkYmFjayIsInN0YXR1cyIsIm1lc3NhZ2UiLCJzZXR0aW5ncyIsImJhY2t1cCIsImxvY2F0aW9uIiwiaHJlZiIsImNvbmZpZyIsIk9iamVjdCIsImFzc2lnbiIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwidXNlckZlZWRiYWNrRXJyb3IiLCJjb25zb2xlIiwicmF3IiwicmVxdWVzdCIsInVybCIsIm9wdGlvbnMiLCJjYWxsYmFjayIsIm1ldGhvZCIsImRhdGEiLCJGb3JtRGF0YSIsImJvZHkiLCJhZG1pbl9ub25jZSIsIm1hcCIsImFwcGVuZCIsImNyZWRlbnRpYWxzIiwiaGVhZGVycyIsImZldGNoIiwiR0lUX1JFR0VYIiwiV0laQVJEIiwiUkVTRVRfTE9DQUwiLCJTRVJWSUNFUyIsIkJSQU5DSEVTIiwiVEVNUExBVEVTIiwiUkVQT19VUkwiLCJvcGVuV2l6YXJkIiwibW9kYWwiLCJyZW1vZGFsIiwiY2xvc2VPbkNvbmZpcm0iLCJwcmV2aW91cyIsImZpbmQiLCJuZXh0Iiwic2F2ZSIsIlNURVAiLCJoaWRlIiwicmVtb3ZlQ2xhc3MiLCJzaG93IiwiYWRkQ2xhc3MiLCJ3ZWJob29rIiwidmFsIiwid2ViaG9va19zZWNyZXQiLCJ0cmlnZ2VyIiwib3BlbiIsImRpc2FibGVCdXR0b24iLCJhdHRyIiwiZW5hYmxlQnV0dG9uIiwiU1RFUFMiLCJTRVJWSUNFIiwiZSIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJ0YXJnZXQiLCJjbG9zZXN0IiwiYWN0aW9uIiwiVVJJIiwicmVsYXRpdmVVUkkiLCJ0YXNrIiwib25lIiwiY2xvc2UiLCJ1c2VyIiwibm9Vc2VyIiwiaXMiLCJwYXNzd29yZCIsInJlcG9zaXRvcnkiLCJicmFuY2giLCJ3ZWJob29rX2VuYWJsZWQiLCJwdXNoIiwiaW5jbHVkZXMiLCJsZW5ndGgiLCJqb2luIiwiZm9sZGVycyIsImkiLCJpdGVtIiwidmFsdWUiLCJwcm9wIiwiZGF0YUZvbGRlcnMiLCJzZWxlY3RpemUiLCJzZXRWYWx1ZSIsInRvQXJyYXkiLCJ0ZXN0IiwiYnRvYSIsInN0cmluZ2lmeSIsInNlbGVjdGVkUmVwbyIsInJlcG9VUkwiLCJjdXJyZW50VGFyZ2V0IiwiaXNHaXRVUkwiLCJjaGVja2VkIiwic2VjcmV0IiwiaHRtbCIsInNlcnZpY2UiLCJyZXBsYWNlIiwiZW5kIiwiYnV0dG9uIiwicGFuZWwiLCJzbGlkZVRvZ2dsZSIsImlzVmlzaWJsZSIsImljb24iLCJzaG93Tm90aWNlcyIsImVsZW1lbnQiLCJzZWxlY3Rpb24iLCJjb2x1bW4iLCJmYWRlSW4iLCJkdXJhdGlvbiIsInNpYmxpbmdzIiwiY29udGFpbmVyIiwid3JhcElubmVyIiwiU2V0dGluZ3MiXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTSxnQ0FBNEIsVzs7Ozs7Ozs7O0FDQWxDO0FBRUFBLHdDQUFBLEdBQStCLGlCQUEvQjtBQUNBQSw0Q0FBQSxHQUFtQyxJQUFuQztBQUVBLG1EQUFlQSxrQkFBZixFOztBQ0xBO0FBQ0E7QUFFQSxJQUFNQyxjQUFjLEdBQUdDLHlCQUFDLENBQUMsaUJBQUQsQ0FBeEI7QUFFQUEseUJBQUMsQ0FBQ0MsTUFBRCxDQUFELENBQVVDLEVBQVYsQ0FBYSxTQUFiLEVBQXdCLFlBQU07QUFDMUJILGdCQUFjLENBQUNJLFNBQWY7QUFDSCxDQUZEO0FBSUFILHlCQUFDLENBQUNDLE1BQUQsQ0FBRCxDQUFVQyxFQUFWLENBQWEsUUFBYixFQUF1QixZQUFNO0FBQ3pCSCxnQkFBYyxDQUFDSyxPQUFmO0FBQ0gsQ0FGRDtBQUlBSix5QkFBQyxDQUFDSyxRQUFELENBQUQsQ0FBWUMsS0FBWixDQUFrQixZQUFNO0FBQ3BCLE1BQUksQ0FBQ0MsT0FBTCxFQUFlO0FBQ1hSLGtCQUFjLENBQUNJLFNBQWY7QUFDSDtBQUNKLENBSkQsRSxDQU1BOztBQUNBLDhDQUFlLE9BQU9LLHFCQUFNLENBQUNDLFNBQVAsQ0FBaUJDLE1BQXhCLEtBQW1DLFdBQW5DLEdBQWlERixxQkFBTSxD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QUFzQixlQUF0Qjs7QUFFQSxNQUFJdEYsTUFBTSxDQUFDaUQsTUFBUCxLQUFrQnNDLHVDQUFBLElBQXVCLENBQUNBLDBDQUExQyxDQUFKLEVBQXVFO0FBQ25FakYsY0FBVTtBQUNiO0FBQ0osQ0FSRDtBQVVBLDZDQUFlaUYsd0RBQWYsSSIsImZpbGUiOiI4NDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gR2l0U3luYzsiLCJpbXBvcnQgdG9hc3RyIGZyb20gJ3RvYXN0cic7XG5cbnRvYXN0ci5vcHRpb25zLnBvc2l0aW9uQ2xhc3MgPSAndG9hc3QtdG9wLXJpZ2h0JztcbnRvYXN0ci5vcHRpb25zLnByZXZlbnREdXBsaWNhdGVzID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgdG9hc3RyO1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBpc09ubGluZSBmcm9tICcuLi91dGlscy9vZmZsaW5lJztcblxuY29uc3Qgb2ZmbGluZUVsZW1lbnQgPSAkKCcjb2ZmbGluZS1zdGF0dXMnKTtcblxuJCh3aW5kb3cpLm9uKCdvZmZsaW5lJywgKCkgPT4ge1xuICAgIG9mZmxpbmVFbGVtZW50LnNsaWRlRG93bigpO1xufSk7XG5cbiQod2luZG93KS5vbignb25saW5lJywgKCkgPT4ge1xuICAgIG9mZmxpbmVFbGVtZW50LnNsaWRlVXAoKTtcbn0pO1xuXG4kKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgaWYgKCFpc09ubGluZSkge1xuICAgICAgICBvZmZsaW5lRWxlbWVudC5zbGlkZURvd24oKTtcbiAgICB9XG59KTtcblxuLy8gYXNzdW1lIG9ubGluZSBpZiBjYW4ndCBjaGVja1xuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIGdsb2JhbC5uYXZpZ2F0b3Iub25MaW5lICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbC5uYXZpZ2F0b3Iub25MaW5lIDogdHJ1ZTtcbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSBHcmF2QWRtaW47IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCB0b2FzdHIgZnJvbSAnLi90b2FzdHInO1xuaW1wb3J0IGlzT25saW5lIGZyb20gJy4vb2ZmbGluZSc7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICdncmF2LWNvbmZpZyc7XG5pbXBvcnQgdHJpbSBmcm9tICdtb3V0L3N0cmluZy90cmltJztcblxubGV0IFVOTE9BRElORyA9IGZhbHNlO1xubGV0IGVycm9yID0gZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICBsZXQgZXJyb3IgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzVGV4dCB8fCByZXNwb25zZSB8fCAnJyk7XG4gICAgZXJyb3IucmVzcG9uc2UgPSByZXNwb25zZTtcblxuICAgIHJldHVybiBlcnJvcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0YXR1cyhyZXNwb25zZSkge1xuICAgIHJldHVybiByZXNwb25zZTtcblxuICAgIC8qIFdob29wcyBjYW4gaGFuZGxlIEpTT04gcmVzcG9uc2VzIHNvIHdlIGRvbid0IG5lZWQgdGhpcyBmb3Igbm93LlxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICovXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUpTT04ocmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpLnRoZW4oKHRleHQpID0+IHtcbiAgICAgICAgbGV0IHBhcnNlZCA9IHRleHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gdGV4dDtcblxuICAgICAgICAgICAgbGV0IHRoZV9lcnJvciA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgdGhlX2Vycm9yLnN0YWNrID0gdHJpbShjb250ZW50LmlubmVyVGV4dCk7XG5cbiAgICAgICAgICAgIHRocm93IHRoZV9lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VyRmVlZGJhY2socmVzcG9uc2UpIHtcbiAgICBpZiAoVU5MT0FESU5HKSB7IHJldHVybiB0cnVlOyB9XG5cbiAgICBsZXQgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzIHx8IChyZXNwb25zZS5lcnJvciA/ICdlcnJvcicgOiAnJyk7XG4gICAgbGV0IG1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlIHx8IChyZXNwb25zZS5lcnJvciA/IHJlc3BvbnNlLmVycm9yLm1lc3NhZ2UgOiBudWxsKTtcbiAgICBsZXQgc2V0dGluZ3MgPSByZXNwb25zZS50b2FzdHIgfHwgbnVsbDtcbiAgICBsZXQgYmFja3VwO1xuXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgY2FzZSAndW5hdXRoZW50aWNhdGVkJzpcbiAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSBjb25maWcuYmFzZV91cmxfcmVsYXRpdmU7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcignTG9nZ2VkIG91dCcpO1xuICAgICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdVbmF1dGhvcml6ZWQuJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICBzdGF0dXMgPSAnZXJyb3InO1xuICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3IuJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgICAgIHN0YXR1cyA9ICdzdWNjZXNzJztcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8ICcnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzdGF0dXMgPSAnZXJyb3InO1xuICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQUpBWCByZXNwb25zZS4nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIGJhY2t1cCA9IE9iamVjdC5hc3NpZ24oe30sIHRvYXN0ci5vcHRpb25zKTtcbiAgICAgICAgT2JqZWN0LmtleXMoc2V0dGluZ3MpLmZvckVhY2goKGtleSkgPT4geyB0b2FzdHIub3B0aW9uc1trZXldID0gc2V0dGluZ3Nba2V5XTsgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1lc3NhZ2UgJiYgKGlzT25saW5lIHx8ICghaXNPbmxpbmUgJiYgc3RhdHVzICE9PSAnZXJyb3InKSkpIHtcbiAgICAgICAgdG9hc3RyW3N0YXR1cyA9PT0gJ3N1Y2Nlc3MnID8gJ3N1Y2Nlc3MnIDogJ2Vycm9yJ10obWVzc2FnZSk7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIHRvYXN0ci5vcHRpb25zID0gYmFja3VwO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZXJGZWVkYmFja0Vycm9yKGVycm9yKSB7XG4gICAgaWYgKFVOTE9BRElORykgeyByZXR1cm4gdHJ1ZTsgfVxuICAgIGxldCBzdGFjayA9IGVycm9yLnN0YWNrID8gYDxwcmU+PGNvZGU+JHtlcnJvci5zdGFja308L2NvZGU+PC9wcmU+YCA6ICcnO1xuICAgIHRvYXN0ci5lcnJvcihgRmV0Y2ggRmFpbGVkOiA8YnIgLz4gJHtlcnJvci5tZXNzYWdlfSAke3N0YWNrfWApO1xuICAgIGNvbnNvbGUuZXJyb3IoYCR7ZXJyb3IubWVzc2FnZX0gYXQgJHtlcnJvci5zdGFja31gKTtcbn1cblxuJChnbG9iYWwpLm9uKCdiZWZvcmV1bmxvYWQuX2FqYXgnLCAoKSA9PiB7XG4gICAgVU5MT0FESU5HID0gdHJ1ZTtcbn0pO1xuIiwiaW1wb3J0IHsgcGFyc2VTdGF0dXMsIHBhcnNlSlNPTiwgdXNlckZlZWRiYWNrLCB1c2VyRmVlZGJhY2tFcnJvciB9IGZyb20gJy4vcmVzcG9uc2UnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnZ3Jhdi1jb25maWcnO1xuXG5sZXQgcmF3O1xubGV0IHJlcXVlc3QgPSBmdW5jdGlvbih1cmwsIG9wdGlvbnMgPSB7fSwgY2FsbGJhY2sgPSAoKSA9PiB0cnVlKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1ldGhvZCAmJiBvcHRpb25zLm1ldGhvZCA9PT0gJ3Bvc3QnKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICAgICAgb3B0aW9ucy5ib2R5ID0gT2JqZWN0LmFzc2lnbih7ICdhZG1pbi1ub25jZSc6IGNvbmZpZy5hZG1pbl9ub25jZSB9LCBvcHRpb25zLmJvZHkgfHwge30pO1xuICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zLmJvZHkpLm1hcCgoa2V5KSA9PiBkYXRhLmFwcGVuZChrZXksIG9wdGlvbnMuYm9keVtrZXldKSk7XG4gICAgICAgIG9wdGlvbnMuYm9keSA9IGRhdGE7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9XG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gZmV0Y2godXJsLCBvcHRpb25zKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHJhdyA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihwYXJzZVN0YXR1cylcbiAgICAgICAgLnRoZW4ocGFyc2VKU09OKVxuICAgICAgICAudGhlbih1c2VyRmVlZGJhY2spXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gY2FsbGJhY2socmVzcG9uc2UsIHJhdykpXG4gICAgICAgIC5jYXRjaCh1c2VyRmVlZGJhY2tFcnJvcik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZXF1ZXN0O1xuIiwiaW1wb3J0IFNldHRpbmdzIGZyb20gJ2dpdC1zeW5jJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJ2FkbWluL3V0aWxzL3JlcXVlc3QnO1xuaW1wb3J0IHRvYXN0ciBmcm9tICdhZG1pbi91dGlscy90b2FzdHInO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnZ3Jhdi1jb25maWcnO1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCAnd2hhdHdnLWZldGNoJztcblxuY29uc3QgR0lUX1JFR0VYID0gLyg/OmdpdHxzc2h8aHR0cHM/fGdpdEBbLVxcdy5dKyk6KFxcL1xcLyk/KC4qPykoXFwuZ2l0KShcXC8/fFxcI1stXFxkXFx3Ll9dKz8pJC87XG5jb25zdCBXSVpBUkQgPSAkKCdbZGF0YS1yZW1vZGFsLWlkPVwid2l6YXJkXCJdJyk7XG5jb25zdCBSRVNFVF9MT0NBTCA9ICQoJ1tkYXRhLXJlbW9kYWwtaWQ9XCJyZXNldC1sb2NhbFwiXScpO1xuY29uc3QgU0VSVklDRVMgPSB7ICdnaXRodWInOiAnZ2l0aHViLmNvbScsICdiaXRidWNrZXQnOiAnYml0YnVja2V0Lm9yZycsICdnaXRsYWInOiAnZ2l0bGFiLmNvbScsICdhbGxvdGhlcnMnOiAnYWxsb3RoZXJzLnJlcG8nIH07XG5jb25zdCBCUkFOQ0hFUyA9IHsgJ2dpdGh1Yic6ICdtYWluJywgJ2JpdGJ1Y2tldCc6ICdtYXN0ZXInLCAnZ2l0bGFiJzogJ21hc3RlcicsICdhbGxvdGhlcnMnOiAnbWFzdGVyJyB9O1xuY29uc3QgVEVNUExBVEVTID0ge1xuICAgIFJFUE9fVVJMOiAnaHR0cHM6Ly97cGxhY2Vob2xkZXJ9L2dldGdyYXYvZ3Jhdi5naXQnXG59O1xuXG5jb25zdCBvcGVuV2l6YXJkID0gKCkgPT4ge1xuICAgIGNvbnN0IG1vZGFsID0gV0laQVJELnJlbW9kYWwoeyBjbG9zZU9uQ29uZmlybTogZmFsc2UgfSk7XG4gICAgY29uc3QgcHJldmlvdXMgPSBXSVpBUkQuZmluZCgnW2RhdGEtZ2l0c3luYy1hY3Rpb249XCJwcmV2aW91c1wiXScpO1xuICAgIGNvbnN0IG5leHQgPSBXSVpBUkQuZmluZCgnW2RhdGEtZ2l0c3luYy1hY3Rpb249XCJuZXh0XCJdJyk7XG4gICAgY29uc3Qgc2F2ZSA9IFdJWkFSRC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cInNhdmVcIl0nKTtcblxuICAgIFNURVAgPSAwO1xuXG4gICAgV0laQVJELmZpbmQoYGZvcm0gPiBbY2xhc3NePXN0ZXAtXTpub3QoLnN0ZXAtJHtTVEVQfSkgPiAucGFuZWxgKS5oaWRlKCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgIFdJWkFSRC5maW5kKGBmb3JtID4gW2NsYXNzPVwic3RlcC0ke1NURVB9XCJdID4gLnBhbmVsYCkuc2hvdygpO1xuXG4gICAgbmV4dC5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgcHJldmlvdXMuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgIHNhdmUuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuXG4gICAgY29uc3Qgd2ViaG9vayA9ICQoJ1tuYW1lPVwiZGF0YVt3ZWJob29rXVwiXScpLnZhbCgpO1xuICAgIGNvbnN0IHdlYmhvb2tfc2VjcmV0ID0gJCgnW25hbWU9XCJkYXRhW3dlYmhvb2tfc2VjcmV0XVwiXScpLnZhbCgpO1xuICAgICQoJ1tuYW1lPVwiZ2l0c3luY1tyZXBvc2l0b3J5XVwiXScpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICQoJ1tuYW1lPVwiZ2l0c3luY1t3ZWJob29rXVwiXScpLnZhbCh3ZWJob29rKTtcbiAgICAkKCdbbmFtZT1cImdpdHN5bmNbd2ViaG9va19zZWNyZXRdXCJdJykudmFsKHdlYmhvb2tfc2VjcmV0KTtcbiAgICAkKCcuZ2l0c3luYy13ZWJob29rJykudGV4dCh3ZWJob29rKTtcblxuICAgIG1vZGFsLm9wZW4oKTtcbn07XG5cbmNvbnN0IGRpc2FibGVCdXR0b24gPSAobmV4dCkgPT4ge1xuICAgIG5leHRcbiAgICAgICAgLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJylcbiAgICAgICAgLmFkZENsYXNzKCdoaW50LS10b3AnKTtcbn07XG5cbmNvbnN0IGVuYWJsZUJ1dHRvbiA9IChuZXh0KSA9PiB7XG4gICAgbmV4dFxuICAgICAgICAuYXR0cignZGlzYWJsZWQnLCBudWxsKVxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ2hpbnQtLXRvcCcpO1xufTtcblxubGV0IFNURVAgPSAwO1xubGV0IFNURVBTID0gMDtcbmxldCBTRVJWSUNFID0gbnVsbDtcblxuJChkb2N1bWVudCkub24oJ2Nsb3NlZCcsIFdJWkFSRCwgZnVuY3Rpb24oZSkge1xuICAgIFNURVAgPSAwO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1naXRzeW5jLXVzZXJhY3Rpb25dJywgKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnW2RhdGEtZ2l0c3luYy11c2VyYWN0aW9uXScpO1xuICAgIGNvbnN0IGFjdGlvbiA9IHRhcmdldC5kYXRhKCdnaXRzeW5jVXNlcmFjdGlvbicpO1xuICAgIGNvbnN0IFVSSSA9IGAke2NvbmZpZy5jdXJyZW50X3VybH0uanNvbmA7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICBjYXNlICd3aXphcmQnOlxuICAgICAgICAgICAgb3BlbldpemFyZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N5bmMnOlxuICAgICAgICAgICAgY29uc3QgcmVsYXRpdmVVUkkgPSB0YXJnZXQuZGF0YSgnZ2l0c3luYy11cmknKTtcbiAgICAgICAgICAgIHRhcmdldC5maW5kKCdpJykucmVtb3ZlQ2xhc3MoJ2ZhLWNsb3VkIGZhLWdpdCcpLmFkZENsYXNzKCdmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluJyk7XG5cbiAgICAgICAgICAgIHJlcXVlc3QocmVsYXRpdmVVUkkgfHwgVVJJLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICAgICAgICAgICAgYm9keTogeyB0YXNrOiAnc3luY2hyb25pemUnIH1cbiAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQuZmluZCgnaScpLnJlbW92ZUNsYXNzKCdmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluJykuYWRkQ2xhc3MocmVsYXRpdmVVUkkgPyAnZmEtZ2l0JyA6ICdmYS1jbG91ZCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVzZXQnOlxuICAgICAgICAgICAgY29uc3QgbW9kYWwgPSBSRVNFVF9MT0NBTC5yZW1vZGFsKHsgY2xvc2VPbkNvbmZpcm06IGZhbHNlIH0pO1xuICAgICAgICAgICAgbW9kYWwub3BlbigpO1xuXG4gICAgICAgICAgICBpZiAoIVJFU0VUX0xPQ0FMLmRhdGEoJ19yZXNldF9ldmVudF9zZXRfJykpIHtcbiAgICAgICAgICAgICAgICBSRVNFVF9MT0NBTC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cInJlc2V0LWxvY2FsXCJdJykub25lKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgUkVTRVRfTE9DQUwuZGF0YSgnX3Jlc2V0X2V2ZW50X3NldF8nLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmZpbmQoJ2knKS5yZW1vdmVDbGFzcygnZmEtaGlzdG9yeScpLmFkZENsYXNzKCdmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QoVVJJLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHsgdGFzazogJ3Jlc2V0bG9jYWwnIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgUkVTRVRfTE9DQUwuZGF0YSgnX3Jlc2V0X2V2ZW50X3NldF8nLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZmluZCgnaScpLnJlbW92ZUNsYXNzKCdmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluJykuYWRkQ2xhc3MoJ2ZhLWhpc3RvcnknKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59KTtcblxuJChkb2N1bWVudCkub24oJ2NsaWNrJywgJ1tkYXRhLWdpdHN5bmMtYWN0aW9uXScsIChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnW2RhdGEtZ2l0c3luYy1hY3Rpb25dJyk7XG4gICAgY29uc3QgcHJldmlvdXMgPSBXSVpBUkQuZmluZCgnW2RhdGEtZ2l0c3luYy1hY3Rpb249XCJwcmV2aW91c1wiXScpO1xuICAgIGNvbnN0IG5leHQgPSBXSVpBUkQuZmluZCgnW2RhdGEtZ2l0c3luYy1hY3Rpb249XCJuZXh0XCJdJyk7XG4gICAgY29uc3Qgc2F2ZSA9IFdJWkFSRC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cInNhdmVcIl0nKTtcbiAgICBjb25zdCBhY3Rpb24gPSB0YXJnZXQuZGF0YSgnZ2l0c3luY0FjdGlvbicpO1xuICAgIGNvbnN0IHVzZXIgPSAkKCdbbmFtZT1cImdpdHN5bmNbcmVwb191c2VyXVwiXScpLnZhbCgpO1xuICAgIGNvbnN0IG5vVXNlciA9ICQoJ1tuYW1lPVwiZ2l0c3luY1tub191c2VyXVwiXScpLmlzKCc6Y2hlY2tlZCcpO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gJCgnW25hbWU9XCJnaXRzeW5jW3JlcG9fcGFzc3dvcmRdXCJdJykudmFsKCk7XG4gICAgY29uc3QgcmVwb3NpdG9yeSA9ICQoJ1tuYW1lPVwiZ2l0c3luY1tyZXBvX3VybF1cIl0nKS52YWwoKTtcbiAgICBjb25zdCBicmFuY2ggPSAkKCdbbmFtZT1cImdpdHN5bmNbYnJhbmNoXVwiXScpLnZhbCgpO1xuICAgIGNvbnN0IHdlYmhvb2sgPSAkKCdbbmFtZT1cImdpdHN5bmNbd2ViaG9va11cIl0nKS52YWwoKTtcbiAgICBjb25zdCB3ZWJob29rX2VuYWJsZWQgPSAkKCdbbmFtZT1cImdpdHN5bmNbd2ViaG9va19lbmFibGVkXVwiXScpLmlzKCc6Y2hlY2tlZCcpO1xuICAgIGNvbnN0IHdlYmhvb2tfc2VjcmV0ID0gJCgnW25hbWU9XCJnaXRzeW5jW3dlYmhvb2tfc2VjcmV0XVwiXScpLnZhbCgpO1xuXG4gICAgaWYgKHRhcmdldC5hdHRyKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZXJyb3IgPSBbXTtcblxuICAgIGlmICghdXNlciAmJiAhbm9Vc2VyKSB7XG4gICAgICAgIGVycm9yLnB1c2goJ1VzZXJuYW1lIGlzIG1pc3NpbmcuJyk7XG4gICAgfVxuICAgIC8qXG4gICAgaWYgKCFwYXNzd29yZCkge1xuICAgICAgICBlcnJvci5wdXNoKCdQYXNzd29yZCBpcyBtaXNzaW5nLicpO1xuICAgIH1cbiAgICAqL1xuICAgIGlmICghcmVwb3NpdG9yeSkge1xuICAgICAgICBlcnJvci5wdXNoKCdSZXBvc2l0b3J5IGlzIG1pc3NpbmcuJyk7XG4gICAgfVxuXG4gICAgaWYgKFsnc2F2ZScsICd0ZXN0J10uaW5jbHVkZXMoYWN0aW9uKSkge1xuICAgICAgICB0YXJnZXQuZmluZCgnLmZhJykucmVtb3ZlQ2xhc3MoYWN0aW9uID09PSAndGVzdCcgPyAnZmEtcGx1ZycgOiAnZmEtY2hlY2snKS5hZGRDbGFzcygnZmEtc3BpbiBmYS1jaXJjbGUtby1ub3RjaCcpO1xuXG4gICAgICAgIGlmIChlcnJvci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvYXN0ci5lcnJvcihlcnJvci5qb2luKCc8YnIgLz4nKSk7XG4gICAgICAgICAgICB0YXJnZXQuZmluZCgnLmZhJykucmVtb3ZlQ2xhc3MoJ2ZhLXNwaW4gZmEtY2lyY2xlLW8tbm90Y2gnKS5hZGRDbGFzcyhhY3Rpb24gPT09ICd0ZXN0JyA/ICdmYS1wbHVnJyA6ICdmYS1jaGVjaycpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWN0aW9uID09PSAnc2F2ZScpIHtcbiAgICAgICAgY29uc3QgZm9sZGVycyA9ICQoJ1tuYW1lPVwiZ2l0c3luY1tmb2xkZXJzXVwiXTpjaGVja2VkJykubWFwKChpLCBpdGVtKSA9PiBpdGVtLnZhbHVlKTtcbiAgICAgICAgJCgnW25hbWU9XCJkYXRhW3JlcG9zaXRvcnldXCJdJykudmFsKHJlcG9zaXRvcnkpO1xuICAgICAgICAkKCdbbmFtZT1cImRhdGFbbm9fdXNlcl1cIl0nKS52YWwobm9Vc2VyID8gJzEnIDogJzAnKTtcbiAgICAgICAgJCgnW25hbWU9XCJkYXRhW3VzZXJdXCJdJykudmFsKHVzZXIpO1xuICAgICAgICAkKCdbbmFtZT1cImRhdGFbcGFzc3dvcmRdXCJdJykudmFsKHBhc3N3b3JkKTtcbiAgICAgICAgJCgnW25hbWU9XCJkYXRhW2JyYW5jaF1cIl0nKS52YWwoYnJhbmNoKTtcbiAgICAgICAgJCgnW25hbWU9XCJkYXRhW3JlbW90ZV1bYnJhbmNoXVwiXScpLnZhbChicmFuY2gpO1xuICAgICAgICAkKCdbbmFtZT1cImRhdGFbd2ViaG9va11cIl0nKS52YWwod2ViaG9vayk7XG4gICAgICAgICQoYFtuYW1lPVwiZGF0YVt3ZWJob29rX2VuYWJsZWRdXCJdW3ZhbHVlPVwiJHt3ZWJob29rX2VuYWJsZWQgPyAxIDogMH1cIl1gKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICAgICQoJ1tuYW1lPVwiZGF0YVt3ZWJob29rX3NlY3JldF1cIl0nKS52YWwod2ViaG9va19zZWNyZXQpO1xuXG4gICAgICAgIGNvbnN0IGRhdGFGb2xkZXJzID0gJCgnW25hbWU9XCJkYXRhW2ZvbGRlcnNdW11cIl0nKTtcbiAgICAgICAgaWYgKGRhdGFGb2xkZXJzICYmIGRhdGFGb2xkZXJzWzBdICYmIGRhdGFGb2xkZXJzWzBdLnNlbGVjdGl6ZSkge1xuICAgICAgICAgICAgZGF0YUZvbGRlcnNbMF0uc2VsZWN0aXplLnNldFZhbHVlKGZvbGRlcnMudG9BcnJheSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgICQoJ1tuYW1lPVwidGFza1wiXVt2YWx1ZT1cInNhdmVcIl0nKS50cmlnZ2VyKCdjbGljaycpO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aW9uID09PSAndGVzdCcpIHtcbiAgICAgICAgY29uc3QgVVJJID0gYCR7Y29uZmlnLmN1cnJlbnRfdXJsfS5qc29uYDtcbiAgICAgICAgY29uc3QgdGVzdCA9IGdsb2JhbC5idG9hKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHVzZXI6IG5vVXNlciA/ICcnIDogdXNlcixcbiAgICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgICAgcmVwb3NpdG9yeSxcbiAgICAgICAgICAgIGJyYW5jaFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgcmVxdWVzdChVUkksIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICAgICAgYm9keTogeyB0ZXN0LCB0YXNrOiAndGVzdENvbm5lY3Rpb24nIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGFyZ2V0LmZpbmQoJy5mYScpLnJlbW92ZUNsYXNzKCdmYS1zcGluIGZhLWNpcmNsZS1vLW5vdGNoJykuYWRkQ2xhc3MoJ2ZhLXBsdWcnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIFdJWkFSRC5maW5kKGAuc3RlcC0ke1NURVB9ID4gLnBhbmVsYCkuc2xpZGVVcCgpO1xuICAgIFNURVAgKz0gYWN0aW9uID09PSAnbmV4dCcgPyArMSA6IC0xO1xuICAgIFdJWkFSRC5maW5kKGAuc3RlcC0ke1NURVB9ID4gLnBhbmVsYCkuc2xpZGVEb3duKCk7XG5cbiAgICBzYXZlLmFkZENsYXNzKCdoaWRkZW4nKTtcblxuICAgIGlmIChhY3Rpb24gPT09ICduZXh0Jykge1xuICAgICAgICBwcmV2aW91cy5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgfVxuXG4gICAgaWYgKFNURVAgPD0gMCkge1xuICAgICAgICBwcmV2aW91cy5hZGRDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgIGVuYWJsZUJ1dHRvbihuZXh0KTtcbiAgICB9XG5cbiAgICBpZiAoU1RFUCA+IDApIHtcbiAgICAgICAgbmV4dC5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgfVxuXG4gICAgaWYgKFNURVAgPT09IDEpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSZXBvID0gJCgnW25hbWU9XCJnaXRzeW5jW3JlcG9zaXRvcnldXCJdOmNoZWNrZWQnKTtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFJlcG8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBkaXNhYmxlQnV0dG9uKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW5hYmxlQnV0dG9uKG5leHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFNURVAgPT09IDIpIHtcbiAgICAgICAgY29uc3QgcmVwb1VSTCA9ICQoJ1tuYW1lPVwiZ2l0c3luY1tyZXBvX3VybF1cIl0nKS52YWwoKTtcbiAgICAgICAgaWYgKCFyZXBvVVJMLmxlbmd0aCB8fCAhYnJhbmNoKSB7XG4gICAgICAgICAgICBkaXNhYmxlQnV0dG9uKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW5hYmxlQnV0dG9uKG5leHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFNURVAgPT09IFNURVBTKSB7XG4gICAgICAgIG5leHQuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICBwcmV2aW91cy5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgIHNhdmUucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgIH1cbn0pO1xuXG4kKGRvY3VtZW50KS5vbignaW5wdXQnLCAnW25hbWU9XCJnaXRzeW5jW25vX3VzZXJdXCJdJywgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCB1c2VyID0gJCgnW25hbWU9XCJnaXRzeW5jW3JlcG9fdXNlcl1cIl0nKTtcbiAgICBpZiAodGFyZ2V0LmlzKCc6Y2hlY2tlZCcpKSB7XG4gICAgICAgIHVzZXJcbiAgICAgICAgICAgIC52YWwoJycpXG4gICAgICAgICAgICAucHJvcCgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKVxuICAgICAgICAgICAgLmF0dHIoJ3BsYWNlaG9sZGVyJywgJzx1c2VybmFtZSBub3QgcmVxdWlyZWQ+Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdXNlclxuICAgICAgICAgICAgLnByb3AoJ2Rpc2FibGVkJywgbnVsbClcbiAgICAgICAgICAgIC5hdHRyKCdwbGFjZWhvbGRlcicsICdVc2VybmFtZSwgbm90IGVtYWlsJyk7XG4gICAgfVxufSk7XG4kKGRvY3VtZW50KS5vbignY2hhbmdlJywgJ1tuYW1lPVwiZ2l0c3luY1tyZXBvc2l0b3J5XVwiXScsICgpID0+IHtcbiAgICBlbmFibGVCdXR0b24oV0laQVJELmZpbmQoJ1tkYXRhLWdpdHN5bmMtYWN0aW9uPVwibmV4dFwiXScpKTtcbn0pO1xuXG4kKGRvY3VtZW50KS5vbignaW5wdXQnLCAnW25hbWU9XCJnaXRzeW5jW3JlcG9fdXJsXVwiXScsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXQudmFsKCk7XG4gICAgY29uc3QgaXNHaXRVUkwgPSBHSVRfUkVHRVgudGVzdCh2YWx1ZSk7XG4gICAgY29uc3QgbmV4dCA9IFdJWkFSRC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cIm5leHRcIl0nKTtcblxuICAgIHRhcmdldC5yZW1vdmVDbGFzcygnaW52YWxpZCcpO1xuXG4gICAgaWYgKCFpc0dpdFVSTCkge1xuICAgICAgICB0YXJnZXQuYWRkQ2xhc3MoJ2ludmFsaWQnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNHaXRVUkwgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIGVuYWJsZUJ1dHRvbihuZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkaXNhYmxlQnV0dG9uKG5leHQpO1xuICAgIH1cbn0pO1xuXG4kKGRvY3VtZW50KS5vbigna2V5dXAnLCAnW2RhdGEtZ2l0c3luYy11cmliYXNlXSBbbmFtZT1cImdpdHN5bmNbd2ViaG9va11cIl0nLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0LnZhbCgpO1xuICAgICQoJy5naXRzeW5jLXdlYmhvb2snKS50ZXh0KHZhbHVlKTtcbn0pO1xuXG4kKGRvY3VtZW50KS5vbigna2V5dXAnLCAnW2RhdGEtZ2l0c3luYy11cmliYXNlXSBbbmFtZT1cImdpdHN5bmNbd2ViaG9va19zZWNyZXRdXCJdJywgKGV2ZW50KSA9PiB7XG4gICAgJCgnW2RhdGEtZ2l0c3luYy11cmliYXNlXSBbbmFtZT1cImdpdHN5bmNbd2ViaG9va19lbmFibGVkXVwiXScpLnRyaWdnZXIoJ2NoYW5nZScpO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnW2RhdGEtZ2l0c3luYy11cmliYXNlXSBbbmFtZT1cImdpdHN5bmNbd2ViaG9va19lbmFibGVkXVwiXScsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgY2hlY2tlZCA9IHRhcmdldC5pcygnOmNoZWNrZWQnKTtcbiAgICBjb25zdCBzZWNyZXQgPSAkKCdbbmFtZT1cImdpdHN5bmNbd2ViaG9va19zZWNyZXRdXCJdJykudmFsKCk7XG4gICAgdGFyZ2V0LmNsb3Nlc3QoJy53ZWJob29rLXNlY3JldC13cmFwcGVyJykuZmluZCgnbGFiZWw6bGFzdC1jaGlsZCcpW2NoZWNrZWQgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oJ2hpZGRlbicpO1xuICAgICQoJy5naXRzeW5jLXdlYmhvb2stc2VjcmV0JykuaHRtbCghY2hlY2tlZCB8fCAhc2VjcmV0Lmxlbmd0aCA/ICc8ZW0+bGVhdmUgZW1wdHk8L2VtPicgOiBgPGNvZGU+JHtzZWNyZXR9PC9jb2RlPmApO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnW25hbWU9XCJnaXRzeW5jW3JlcG9zaXRvcnldXCJdJywgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gJChldmVudC50YXJnZXQpO1xuICAgIGlmICghdGFyZ2V0LmlzKCc6Y2hlY2tlZCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBTRVJWSUNFID0gdGFyZ2V0LnZhbCgpO1xuXG4gICAgT2JqZWN0LmtleXMoU0VSVklDRVMpLmZvckVhY2goKHNlcnZpY2UpID0+IHtcbiAgICAgICAgV0laQVJELmZpbmQoYC5oaWRkZW4tc3RlcC0ke3NlcnZpY2V9YClbc2VydmljZSA9PT0gU0VSVklDRSA/ICdyZW1vdmVDbGFzcycgOiAnYWRkQ2xhc3MnXSgnaGlkZGVuJyk7XG4gICAgICAgIGlmIChzZXJ2aWNlID09PSBTRVJWSUNFKSB7XG4gICAgICAgICAgICBXSVpBUkQuZmluZCgnLndlYmhvb2stc2VjcmV0LXdyYXBwZXInKVtzZXJ2aWNlID09PSAnYml0YnVja2V0JyA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXSgnaGlkZGVuJyk7XG4gICAgICAgICAgICBXSVpBUkRcbiAgICAgICAgICAgICAgICAuZmluZCgnaW5wdXRbbmFtZT1cImdpdHN5bmNbcmVwb191cmxdXCJdW3BsYWNlaG9sZGVyXScpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3BsYWNlaG9sZGVyJywgVEVNUExBVEVTLlJFUE9fVVJMLnJlcGxhY2UoL1xce3BsYWNlaG9sZGVyXFx9LywgU0VSVklDRVNbc2VydmljZV0pKVxuICAgICAgICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgICAgICAgIC5maW5kKCdpbnB1dFtuYW1lPVwiZ2l0c3luY1ticmFuY2hdXCJdJylcbiAgICAgICAgICAgICAgICAuYXR0cigncGxhY2Vob2xkZXInLCBCUkFOQ0hFU1tzZXJ2aWNlXSlcbiAgICAgICAgICAgICAgICAudmFsKEJSQU5DSEVTW3NlcnZpY2VdKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG59KTtcblxuJChkb2N1bWVudCkub24oJ2NsaWNrJywgJ1tkYXRhLWFjY2Vzcy10b2tlbnMtZGV0YWlsc10nLCAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgYnV0dG9uID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCBwYW5lbCA9IGJ1dHRvbi5jbG9zZXN0KCcuYWNjZXNzLXRva2VucycpLmZpbmQoJy5hY2Nlc3MtdG9rZW5zLWRldGFpbHMnKTtcblxuICAgIHBhbmVsLnNsaWRlVG9nZ2xlKDI1MCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpc1Zpc2libGUgPSBwYW5lbC5pcygnOnZpc2libGUnKTtcbiAgICAgICAgY29uc3QgaWNvbiA9IGJ1dHRvbi5maW5kKCcuZmEnKTtcblxuICAgICAgICBpY29uLnJlbW92ZUNsYXNzKCdmYS1jaGV2cm9uLWRvd24gZmEtY2hldnJvbi11cCcpLmFkZENsYXNzKGBmYS1jaGV2cm9uLSR7aXNWaXNpYmxlID8gJ3VwJyA6ICdkb3duJ31gKTtcbiAgICB9KTtcbn0pO1xuXG5jb25zdCBzaG93Tm90aWNlcyA9IChlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gJChlbGVtZW50KTtcblxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRhcmdldC52YWwoKS5yZXBsYWNlKC9cXC8vZywgJy0nKTtcbiAgICBjb25zdCBjb2x1bW4gPSB0YXJnZXQuY2xvc2VzdCgnLmNvbHVtbnMnKS5maW5kKCcuY29sdW1uOmxhc3QnKTtcblxuICAgIGNvbHVtbi5maW5kKCdbY2xhc3MqPVwiZGVzY3JpcHRpb24tXCJdJykuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgIGNvbHVtbi5maW5kKGAuZGVzY3JpcHRpb24tJHtzZWxlY3Rpb259YCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpLmhpZGUoKS5mYWRlSW4oe1xuICAgICAgICBkdXJhdGlvbjogMjUwXG4gICAgfSk7XG59O1xuXG4kKGRvY3VtZW50KS5vbignaW5wdXQnLCAnW2RhdGEtcmVtb2RhbC1pZD1cIndpemFyZFwiXSAuc3RlcC00IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXScsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgaWYgKCF0YXJnZXQuaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNob3dOb3RpY2VzKHRhcmdldCk7XG59KTtcblxuJChkb2N1bWVudCkub24oJ21vdXNlZW50ZXInLCAnW2RhdGEtcmVtb2RhbC1pZD1cIndpemFyZFwiXSAuc3RlcC00IC5pbmZvLWRlc2MnLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLnNpYmxpbmdzKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgICBzaG93Tm90aWNlcyh0YXJnZXQpO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdtb3VzZWxlYXZlJywgJ1tkYXRhLXJlbW9kYWwtaWQ9XCJ3aXphcmRcIl0gLnN0ZXAtNCBsYWJlbCcsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGFyZ2V0LmNsb3Nlc3QoJy5jb2x1bW5zJyk7XG4gICAgY29uc3QgY29sdW1uID0gY29udGFpbmVyLmZpbmQoJy5jb2x1bW46bGFzdC1jaGlsZCcpO1xuXG4gICAgY29sdW1uLmZpbmQoJ1tjbGFzcyo9XCJkZXNjcmlwdGlvbi1cIl0nKS5hZGRDbGFzcygnaGlkZGVuJyk7XG59KTtcblxuJChkb2N1bWVudCkub24oJ21vdXNlbGVhdmUnLCAnW2RhdGEtcmVtb2RhbC1pZD1cIndpemFyZFwiXSAuY29sdW1ucyAuY29sdW1uOmZpcnN0LWNoaWxkJywgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCBjb2x1bW4gPSB0YXJnZXQuc2libGluZ3MoJy5jb2x1bW4nKTtcblxuICAgIGNvbHVtbi5maW5kKCdbY2xhc3MqPVwiZGVzY3JpcHRpb24tXCJdJykuYWRkQ2xhc3MoJ2hpZGRlbicpO1xufSk7XG5cbiQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcbiAgICBTVEVQUyA9IFdJWkFSRC5maW5kKCdbY2xhc3NePVwic3RlcC1cIl0nKS5sZW5ndGggLSAxO1xuICAgIFdJWkFSRC53cmFwSW5uZXIoJzxmb3JtPjwvZm9ybT4nKTtcbiAgICBSRVNFVF9MT0NBTC53cmFwSW5uZXIoJzxmb3JtPjwvZm9ybT4nKTtcblxuICAgIGlmIChXSVpBUkQubGVuZ3RoICYmIChTZXR0aW5ncy5maXJzdF90aW1lIHx8ICFTZXR0aW5ncy5naXRfaW5zdGFsbGVkKSkge1xuICAgICAgICBvcGVuV2l6YXJkKCk7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFNldHRpbmdzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///849\n");
/***/ }),
/***/ 609:
/***/ ((module) => {
module.exports = jQuery;
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = __webpack_modules__;
/******/
/************************************************************************/
/******/ /* webpack/runtime/amd define */
/******/ (() => {
/******/ __webpack_require__.amdD = function () {
/******/ throw new Error('define cannot be used indirect');
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/chunk loaded */
/******/ (() => {
/******/ var deferred = [];
/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => {
/******/ if(chunkIds) {
/******/ priority = priority || 0;
/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
/******/ deferred[i] = [chunkIds, fn, priority];
/******/ return;
/******/ }
/******/ var notFulfilled = Infinity;
/******/ for (var i = 0; i < deferred.length; i++) {
/******/ var [chunkIds, fn, priority] = deferred[i];
/******/ var fulfilled = true;
/******/ for (var j = 0; j < chunkIds.length; j++) {
/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
/******/ chunkIds.splice(j--, 1);
/******/ } else {
/******/ fulfilled = false;
/******/ if(priority < notFulfilled) notFulfilled = priority;
/******/ }
/******/ }
/******/ if(fulfilled) {
/******/ deferred.splice(i--, 1)
/******/ result = fn();
/******/ }
/******/ }
/******/ return result;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = (module) => {
/******/ var getter = module && module.__esModule ?
/******/ () => (module['default']) :
/******/ () => (module);
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/global */
/******/ (() => {
/******/ __webpack_require__.g = (function() {
/******/ if (typeof globalThis === 'object') return globalThis;
/******/ try {
/******/ return this || new Function('return this')();
/******/ } catch (e) {
/******/ if (typeof window === 'object') return window;
/******/ }
/******/ })();
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/jsonp chunk loading */
/******/ (() => {
/******/ // no baseURI
/******/
/******/ // object to store loaded and loading chunks
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
/******/ var installedChunks = {
/******/ 143: 0
/******/ };
/******/
/******/ // no chunk on demand loading
/******/
/******/ // no prefetching
/******/
/******/ // no preloaded
/******/
/******/ // no HMR
/******/
/******/ // no HMR manifest
/******/
/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
/******/
/******/ // install a JSONP callback for chunk loading
/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
/******/ var [chunkIds, moreModules, runtime] = data;
/******/ // add "moreModules" to the modules object,
/******/ // then flag all "chunkIds" as loaded and fire callback
/******/ var moduleId, chunkId, i = 0;
/******/ for(moduleId in moreModules) {
/******/ if(__webpack_require__.o(moreModules, moduleId)) {
/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
/******/ }
/******/ }
/******/ if(runtime) var result = runtime(__webpack_require__);
/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
/******/ for(;i < chunkIds.length; i++) {
/******/ chunkId = chunkIds[i];
/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
/******/ installedChunks[chunkId][0]();
/******/ }
/******/ installedChunks[chunkIds[i]] = 0;
/******/ }
/******/ return __webpack_require__.O(result);
/******/ }
/******/
/******/ var chunkLoadingGlobal = self["webpackChunktrilby_grav_plugin_gitsync"] = self["webpackChunktrilby_grav_plugin_gitsync"] || [];
/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
/******/ })();
/******/
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module depends on other loaded chunks and execution need to be delayed
/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [736], () => (__webpack_require__(849)))
/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
/******/
/******/ })()
;