From 5cbab768db360cf70485d25a08aab3dc78d9645e Mon Sep 17 00:00:00 2001 From: Kevin Chung Date: Tue, 21 Jul 2020 17:59:07 -0400 Subject: [PATCH] Fix re-submitting a challenge submission (#1559) * Fixes an issue preventing submitting a challenge answer in challenge preview window --- CTFd/themes/admin/assets/js/pages/challenge.js | 4 ++-- CTFd/themes/admin/static/js/pages/challenge.dev.js | 2 +- CTFd/themes/admin/static/js/pages/challenge.min.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CTFd/themes/admin/assets/js/pages/challenge.js b/CTFd/themes/admin/assets/js/pages/challenge.js index f33e153e..23ae9093 100644 --- a/CTFd/themes/admin/assets/js/pages/challenge.js +++ b/CTFd/themes/admin/assets/js/pages/challenge.js @@ -120,8 +120,8 @@ function renderSubmissionResponse(response, cb) { } setTimeout(function() { $(".alert").slideUp(); - $("#submit-key").removeClass("disabled-button"); - $("#submit-key").prop("disabled", false); + $("#challenge-submit").removeClass("disabled-button"); + $("#challenge-submit").prop("disabled", false); }, 3000); if (cb) { diff --git a/CTFd/themes/admin/static/js/pages/challenge.dev.js b/CTFd/themes/admin/static/js/pages/challenge.dev.js index 0093f0d1..8c11d711 100644 --- a/CTFd/themes/admin/static/js/pages/challenge.dev.js +++ b/CTFd/themes/admin/static/js/pages/challenge.dev.js @@ -222,7 +222,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n /***/ (function(module, exports, __webpack_require__) { ; -eval("\n\n__webpack_require__(/*! ./main */ \"./CTFd/themes/admin/assets/js/pages/main.js\");\n\nvar _utils = __webpack_require__(/*! core/utils */ \"./CTFd/themes/core/assets/js/utils.js\");\n\nvar _jquery = _interopRequireDefault(__webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\"));\n\n__webpack_require__(/*! bootstrap/js/dist/tab */ \"./node_modules/bootstrap/js/dist/tab.js\");\n\nvar _CTFd = _interopRequireDefault(__webpack_require__(/*! core/CTFd */ \"./CTFd/themes/core/assets/js/CTFd.js\"));\n\nvar _ezq = __webpack_require__(/*! core/ezq */ \"./CTFd/themes/core/assets/js/ezq.js\");\n\nvar _helpers = _interopRequireDefault(__webpack_require__(/*! core/helpers */ \"./CTFd/themes/core/assets/js/helpers.js\"));\n\nvar _files = __webpack_require__(/*! ../challenges/files */ \"./CTFd/themes/admin/assets/js/challenges/files.js\");\n\nvar _tags = __webpack_require__(/*! ../challenges/tags */ \"./CTFd/themes/admin/assets/js/challenges/tags.js\");\n\nvar _requirements = __webpack_require__(/*! ../challenges/requirements */ \"./CTFd/themes/admin/assets/js/challenges/requirements.js\");\n\nvar _styles = __webpack_require__(/*! ../styles */ \"./CTFd/themes/admin/assets/js/styles.js\");\n\nvar _hints = __webpack_require__(/*! ../challenges/hints */ \"./CTFd/themes/admin/assets/js/challenges/hints.js\");\n\nvar _flags = __webpack_require__(/*! ../challenges/flags */ \"./CTFd/themes/admin/assets/js/challenges/flags.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar md = _CTFd.default.lib.markdown();\n\nvar displayHint = function displayHint(data) {\n (0, _ezq.ezAlert)({\n title: \"Hint\",\n body: md.render(data.content),\n button: \"Got it!\"\n });\n};\n\nvar loadHint = function loadHint(id) {\n _CTFd.default.api.get_hint({\n hintId: id,\n preview: true\n }).then(function (response) {\n if (response.data.content) {\n displayHint(response.data);\n return;\n } // displayUnlock(id);\n\n });\n};\n\nfunction renderSubmissionResponse(response, cb) {\n var result = response.data;\n var result_message = (0, _jquery.default)(\"#result-message\");\n var result_notification = (0, _jquery.default)(\"#result-notification\");\n var answer_input = (0, _jquery.default)(\"#submission-input\");\n result_notification.removeClass();\n result_message.text(result.message);\n\n if (result.status === \"authentication_required\") {\n window.location = _CTFd.default.config.urlRoot + \"/login?next=\" + _CTFd.default.config.urlRoot + window.location.pathname + window.location.hash;\n return;\n } else if (result.status === \"incorrect\") {\n // Incorrect key\n result_notification.addClass(\"alert alert-danger alert-dismissable text-center\");\n result_notification.slideDown();\n answer_input.removeClass(\"correct\");\n answer_input.addClass(\"wrong\");\n setTimeout(function () {\n answer_input.removeClass(\"wrong\");\n }, 3000);\n } else if (result.status === \"correct\") {\n // Challenge Solved\n result_notification.addClass(\"alert alert-success alert-dismissable text-center\");\n result_notification.slideDown();\n (0, _jquery.default)(\".challenge-solves\").text(parseInt((0, _jquery.default)(\".challenge-solves\").text().split(\" \")[0]) + 1 + \" Solves\");\n answer_input.val(\"\");\n answer_input.removeClass(\"wrong\");\n answer_input.addClass(\"correct\");\n } else if (result.status === \"already_solved\") {\n // Challenge already solved\n result_notification.addClass(\"alert alert-info alert-dismissable text-center\");\n result_notification.slideDown();\n answer_input.addClass(\"correct\");\n } else if (result.status === \"paused\") {\n // CTF is paused\n result_notification.addClass(\"alert alert-warning alert-dismissable text-center\");\n result_notification.slideDown();\n } else if (result.status === \"ratelimited\") {\n // Keys per minute too high\n result_notification.addClass(\"alert alert-warning alert-dismissable text-center\");\n result_notification.slideDown();\n answer_input.addClass(\"too-fast\");\n setTimeout(function () {\n answer_input.removeClass(\"too-fast\");\n }, 3000);\n }\n\n setTimeout(function () {\n (0, _jquery.default)(\".alert\").slideUp();\n (0, _jquery.default)(\"#submit-key\").removeClass(\"disabled-button\");\n (0, _jquery.default)(\"#submit-key\").prop(\"disabled\", false);\n }, 3000);\n\n if (cb) {\n cb(result);\n }\n}\n\nfunction loadChalTemplate(challenge) {\n _CTFd.default._internal.challenge = {};\n\n _jquery.default.getScript(_CTFd.default.config.urlRoot + challenge.scripts.view, function () {\n var template_data = challenge.create;\n (0, _jquery.default)(\"#create-chal-entry-div\").html(template_data);\n (0, _styles.bindMarkdownEditors)();\n\n _jquery.default.getScript(_CTFd.default.config.urlRoot + challenge.scripts.create, function () {\n (0, _jquery.default)(\"#create-chal-entry-div form\").submit(function (event) {\n event.preventDefault();\n var params = (0, _jquery.default)(\"#create-chal-entry-div form\").serializeJSON();\n\n _CTFd.default.fetch(\"/api/v1/challenges\", {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(params)\n }).then(function (response) {\n return response.json();\n }).then(function (response) {\n if (response.success) {\n (0, _jquery.default)(\"#challenge-create-options #challenge_id\").val(response.data.id);\n (0, _jquery.default)(\"#challenge-create-options\").modal();\n }\n });\n });\n });\n });\n}\n\nfunction handleChallengeOptions(event) {\n event.preventDefault();\n var params = (0, _jquery.default)(event.target).serializeJSON(true);\n var flag_params = {\n challenge_id: params.challenge_id,\n content: params.flag || \"\",\n type: params.flag_type,\n data: params.flag_data ? params.flag_data : \"\"\n }; // Define a save_challenge function\n\n var save_challenge = function save_challenge() {\n _CTFd.default.fetch(\"/api/v1/challenges/\" + params.challenge_id, {\n method: \"PATCH\",\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n state: params.state\n })\n }).then(function (response) {\n return response.json();\n }).then(function (data) {\n if (data.success) {\n setTimeout(function () {\n window.location = _CTFd.default.config.urlRoot + \"/admin/challenges/\" + params.challenge_id;\n }, 700);\n }\n });\n };\n\n Promise.all([// Save flag\n new Promise(function (resolve, _reject) {\n if (flag_params.content.length == 0) {\n resolve();\n return;\n }\n\n _CTFd.default.fetch(\"/api/v1/flags\", {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(flag_params)\n }).then(function (response) {\n resolve(response.json());\n });\n }), // Upload files\n new Promise(function (resolve, _reject) {\n var form = event.target;\n var data = {\n challenge: params.challenge_id,\n type: \"challenge\"\n };\n var filepath = (0, _jquery.default)(form.elements[\"file\"]).val();\n\n if (filepath) {\n _helpers.default.files.upload(form, data);\n }\n\n resolve();\n })]).then(function (_responses) {\n save_challenge();\n });\n}\n\n(0, _jquery.default)(function () {\n (0, _jquery.default)(\".preview-challenge\").click(function (_e) {\n window.challenge = new Object();\n _CTFd.default._internal.challenge = {};\n\n _jquery.default.get(_CTFd.default.config.urlRoot + \"/api/v1/challenges/\" + window.CHALLENGE_ID, function (response) {\n var challenge = _CTFd.default._internal.challenge;\n var challenge_data = response.data;\n challenge_data[\"solves\"] = null;\n\n _jquery.default.getScript(_CTFd.default.config.urlRoot + challenge_data.type_data.scripts.view, function () {\n (0, _jquery.default)(\"#challenge-window\").empty();\n (0, _jquery.default)(\"#challenge-window\").append(challenge_data.view);\n (0, _jquery.default)(\"#challenge-window #challenge-input\").addClass(\"form-control\");\n (0, _jquery.default)(\"#challenge-window #challenge-submit\").addClass(\"btn btn-md btn-outline-secondary float-right\");\n (0, _jquery.default)(\".challenge-solves\").hide();\n (0, _jquery.default)(\".nav-tabs a\").click(function (e) {\n e.preventDefault();\n (0, _jquery.default)(this).tab(\"show\");\n }); // Handle modal toggling\n\n (0, _jquery.default)(\"#challenge-window\").on(\"hide.bs.modal\", function (_event) {\n (0, _jquery.default)(\"#challenge-input\").removeClass(\"wrong\");\n (0, _jquery.default)(\"#challenge-input\").removeClass(\"correct\");\n (0, _jquery.default)(\"#incorrect-key\").slideUp();\n (0, _jquery.default)(\"#correct-key\").slideUp();\n (0, _jquery.default)(\"#already-solved\").slideUp();\n (0, _jquery.default)(\"#too-fast\").slideUp();\n });\n (0, _jquery.default)(\".load-hint\").on(\"click\", function (_event) {\n loadHint((0, _jquery.default)(this).data(\"hint-id\"));\n });\n (0, _jquery.default)(\"#challenge-submit\").click(function (e) {\n e.preventDefault();\n (0, _jquery.default)(\"#challenge-submit\").addClass(\"disabled-button\");\n (0, _jquery.default)(\"#challenge-submit\").prop(\"disabled\", true);\n\n _CTFd.default._internal.challenge.submit(true).then(renderSubmissionResponse); // Preview passed as true\n\n });\n (0, _jquery.default)(\"#challenge-input\").keyup(function (event) {\n if (event.keyCode == 13) {\n (0, _jquery.default)(\"#challenge-submit\").click();\n }\n });\n challenge.postRender();\n window.location.replace(window.location.href.split(\"#\")[0] + \"#preview\");\n (0, _jquery.default)(\"#challenge-window\").modal();\n });\n });\n });\n (0, _jquery.default)(\".delete-challenge\").click(function (_e) {\n (0, _ezq.ezQuery)({\n title: \"Delete Challenge\",\n body: \"Are you sure you want to delete {0}\".format(\"\" + (0, _utils.htmlEntities)(window.CHALLENGE_NAME) + \"\"),\n success: function success() {\n _CTFd.default.fetch(\"/api/v1/challenges/\" + window.CHALLENGE_ID, {\n method: \"DELETE\"\n }).then(function (response) {\n return response.json();\n }).then(function (response) {\n if (response.success) {\n window.location = _CTFd.default.config.urlRoot + \"/admin/challenges\";\n }\n });\n }\n });\n });\n (0, _jquery.default)(\"#challenge-update-container > form\").submit(function (e) {\n e.preventDefault();\n var params = (0, _jquery.default)(e.target).serializeJSON(true);\n\n _CTFd.default.fetch(\"/api/v1/challenges/\" + window.CHALLENGE_ID + \"/flags\", {\n method: \"GET\",\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n }\n }).then(function (response) {\n return response.json();\n }).then(function (response) {\n var update_challenge = function update_challenge() {\n _CTFd.default.fetch(\"/api/v1/challenges/\" + window.CHALLENGE_ID, {\n method: \"PATCH\",\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(params)\n }).then(function (response) {\n return response.json();\n }).then(function (response) {\n if (response.success) {\n (0, _jquery.default)(\".challenge-state\").text(response.data.state);\n\n switch (response.data.state) {\n case \"visible\":\n (0, _jquery.default)(\".challenge-state\").removeClass(\"badge-danger\").addClass(\"badge-success\");\n break;\n\n case \"hidden\":\n (0, _jquery.default)(\".challenge-state\").removeClass(\"badge-success\").addClass(\"badge-danger\");\n break;\n\n default:\n break;\n }\n\n (0, _ezq.ezToast)({\n title: \"Success\",\n body: \"Your challenge has been updated!\"\n });\n }\n });\n }; // Check if the challenge doesn't have any flags before marking visible\n\n\n if (response.data.length === 0 && params.state === \"visible\") {\n (0, _ezq.ezQuery)({\n title: \"Missing Flags\",\n body: \"This challenge does not have any flags meaning it may be unsolveable. Are you sure you'd like to update this challenge?\",\n success: update_challenge\n });\n } else {\n update_challenge();\n }\n });\n });\n (0, _jquery.default)(\"#challenge-create-options form\").submit(handleChallengeOptions);\n (0, _jquery.default)(\"#tags-add-input\").keyup(_tags.addTag);\n (0, _jquery.default)(\".delete-tag\").click(_tags.deleteTag);\n (0, _jquery.default)(\"#prerequisite-add-form\").submit(_requirements.addRequirement);\n (0, _jquery.default)(\".delete-requirement\").click(_requirements.deleteRequirement);\n (0, _jquery.default)(\"#file-add-form\").submit(_files.addFile);\n (0, _jquery.default)(\".delete-file\").click(_files.deleteFile);\n (0, _jquery.default)(\"#hint-add-button\").click(_hints.showHintModal);\n (0, _jquery.default)(\".delete-hint\").click(_hints.deleteHint);\n (0, _jquery.default)(\".edit-hint\").click(_hints.showEditHintModal);\n (0, _jquery.default)(\"#hint-edit-form\").submit(_hints.editHint);\n (0, _jquery.default)(\"#flag-add-button\").click(_flags.addFlagModal);\n (0, _jquery.default)(\".delete-flag\").click(_flags.deleteFlag);\n (0, _jquery.default)(\"#flags-create-select\").change(_flags.flagTypeSelect);\n (0, _jquery.default)(\".edit-flag\").click(_flags.editFlagModal);\n\n _jquery.default.get(_CTFd.default.config.urlRoot + \"/api/v1/challenges/types\", function (response) {\n var data = response.data;\n loadChalTemplate(data[\"standard\"]);\n (0, _jquery.default)(\"#create-chals-select input[name=type]\").change(function () {\n var challenge = data[this.value];\n loadChalTemplate(challenge);\n });\n });\n});\n\n//# sourceURL=webpack:///./CTFd/themes/admin/assets/js/pages/challenge.js?"); +eval("\n\n__webpack_require__(/*! ./main */ \"./CTFd/themes/admin/assets/js/pages/main.js\");\n\nvar _utils = __webpack_require__(/*! core/utils */ \"./CTFd/themes/core/assets/js/utils.js\");\n\nvar _jquery = _interopRequireDefault(__webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\"));\n\n__webpack_require__(/*! bootstrap/js/dist/tab */ \"./node_modules/bootstrap/js/dist/tab.js\");\n\nvar _CTFd = _interopRequireDefault(__webpack_require__(/*! core/CTFd */ \"./CTFd/themes/core/assets/js/CTFd.js\"));\n\nvar _ezq = __webpack_require__(/*! core/ezq */ \"./CTFd/themes/core/assets/js/ezq.js\");\n\nvar _helpers = _interopRequireDefault(__webpack_require__(/*! core/helpers */ \"./CTFd/themes/core/assets/js/helpers.js\"));\n\nvar _files = __webpack_require__(/*! ../challenges/files */ \"./CTFd/themes/admin/assets/js/challenges/files.js\");\n\nvar _tags = __webpack_require__(/*! ../challenges/tags */ \"./CTFd/themes/admin/assets/js/challenges/tags.js\");\n\nvar _requirements = __webpack_require__(/*! ../challenges/requirements */ \"./CTFd/themes/admin/assets/js/challenges/requirements.js\");\n\nvar _styles = __webpack_require__(/*! ../styles */ \"./CTFd/themes/admin/assets/js/styles.js\");\n\nvar _hints = __webpack_require__(/*! ../challenges/hints */ \"./CTFd/themes/admin/assets/js/challenges/hints.js\");\n\nvar _flags = __webpack_require__(/*! ../challenges/flags */ \"./CTFd/themes/admin/assets/js/challenges/flags.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar md = _CTFd.default.lib.markdown();\n\nvar displayHint = function displayHint(data) {\n (0, _ezq.ezAlert)({\n title: \"Hint\",\n body: md.render(data.content),\n button: \"Got it!\"\n });\n};\n\nvar loadHint = function loadHint(id) {\n _CTFd.default.api.get_hint({\n hintId: id,\n preview: true\n }).then(function (response) {\n if (response.data.content) {\n displayHint(response.data);\n return;\n } // displayUnlock(id);\n\n });\n};\n\nfunction renderSubmissionResponse(response, cb) {\n var result = response.data;\n var result_message = (0, _jquery.default)(\"#result-message\");\n var result_notification = (0, _jquery.default)(\"#result-notification\");\n var answer_input = (0, _jquery.default)(\"#submission-input\");\n result_notification.removeClass();\n result_message.text(result.message);\n\n if (result.status === \"authentication_required\") {\n window.location = _CTFd.default.config.urlRoot + \"/login?next=\" + _CTFd.default.config.urlRoot + window.location.pathname + window.location.hash;\n return;\n } else if (result.status === \"incorrect\") {\n // Incorrect key\n result_notification.addClass(\"alert alert-danger alert-dismissable text-center\");\n result_notification.slideDown();\n answer_input.removeClass(\"correct\");\n answer_input.addClass(\"wrong\");\n setTimeout(function () {\n answer_input.removeClass(\"wrong\");\n }, 3000);\n } else if (result.status === \"correct\") {\n // Challenge Solved\n result_notification.addClass(\"alert alert-success alert-dismissable text-center\");\n result_notification.slideDown();\n (0, _jquery.default)(\".challenge-solves\").text(parseInt((0, _jquery.default)(\".challenge-solves\").text().split(\" \")[0]) + 1 + \" Solves\");\n answer_input.val(\"\");\n answer_input.removeClass(\"wrong\");\n answer_input.addClass(\"correct\");\n } else if (result.status === \"already_solved\") {\n // Challenge already solved\n result_notification.addClass(\"alert alert-info alert-dismissable text-center\");\n result_notification.slideDown();\n answer_input.addClass(\"correct\");\n } else if (result.status === \"paused\") {\n // CTF is paused\n result_notification.addClass(\"alert alert-warning alert-dismissable text-center\");\n result_notification.slideDown();\n } else if (result.status === \"ratelimited\") {\n // Keys per minute too high\n result_notification.addClass(\"alert alert-warning alert-dismissable text-center\");\n result_notification.slideDown();\n answer_input.addClass(\"too-fast\");\n setTimeout(function () {\n answer_input.removeClass(\"too-fast\");\n }, 3000);\n }\n\n setTimeout(function () {\n (0, _jquery.default)(\".alert\").slideUp();\n (0, _jquery.default)(\"#challenge-submit\").removeClass(\"disabled-button\");\n (0, _jquery.default)(\"#challenge-submit\").prop(\"disabled\", false);\n }, 3000);\n\n if (cb) {\n cb(result);\n }\n}\n\nfunction loadChalTemplate(challenge) {\n _CTFd.default._internal.challenge = {};\n\n _jquery.default.getScript(_CTFd.default.config.urlRoot + challenge.scripts.view, function () {\n var template_data = challenge.create;\n (0, _jquery.default)(\"#create-chal-entry-div\").html(template_data);\n (0, _styles.bindMarkdownEditors)();\n\n _jquery.default.getScript(_CTFd.default.config.urlRoot + challenge.scripts.create, function () {\n (0, _jquery.default)(\"#create-chal-entry-div form\").submit(function (event) {\n event.preventDefault();\n var params = (0, _jquery.default)(\"#create-chal-entry-div form\").serializeJSON();\n\n _CTFd.default.fetch(\"/api/v1/challenges\", {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(params)\n }).then(function (response) {\n return response.json();\n }).then(function (response) {\n if (response.success) {\n (0, _jquery.default)(\"#challenge-create-options #challenge_id\").val(response.data.id);\n (0, _jquery.default)(\"#challenge-create-options\").modal();\n }\n });\n });\n });\n });\n}\n\nfunction handleChallengeOptions(event) {\n event.preventDefault();\n var params = (0, _jquery.default)(event.target).serializeJSON(true);\n var flag_params = {\n challenge_id: params.challenge_id,\n content: params.flag || \"\",\n type: params.flag_type,\n data: params.flag_data ? params.flag_data : \"\"\n }; // Define a save_challenge function\n\n var save_challenge = function save_challenge() {\n _CTFd.default.fetch(\"/api/v1/challenges/\" + params.challenge_id, {\n method: \"PATCH\",\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n state: params.state\n })\n }).then(function (response) {\n return response.json();\n }).then(function (data) {\n if (data.success) {\n setTimeout(function () {\n window.location = _CTFd.default.config.urlRoot + \"/admin/challenges/\" + params.challenge_id;\n }, 700);\n }\n });\n };\n\n Promise.all([// Save flag\n new Promise(function (resolve, _reject) {\n if (flag_params.content.length == 0) {\n resolve();\n return;\n }\n\n _CTFd.default.fetch(\"/api/v1/flags\", {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(flag_params)\n }).then(function (response) {\n resolve(response.json());\n });\n }), // Upload files\n new Promise(function (resolve, _reject) {\n var form = event.target;\n var data = {\n challenge: params.challenge_id,\n type: \"challenge\"\n };\n var filepath = (0, _jquery.default)(form.elements[\"file\"]).val();\n\n if (filepath) {\n _helpers.default.files.upload(form, data);\n }\n\n resolve();\n })]).then(function (_responses) {\n save_challenge();\n });\n}\n\n(0, _jquery.default)(function () {\n (0, _jquery.default)(\".preview-challenge\").click(function (_e) {\n window.challenge = new Object();\n _CTFd.default._internal.challenge = {};\n\n _jquery.default.get(_CTFd.default.config.urlRoot + \"/api/v1/challenges/\" + window.CHALLENGE_ID, function (response) {\n var challenge = _CTFd.default._internal.challenge;\n var challenge_data = response.data;\n challenge_data[\"solves\"] = null;\n\n _jquery.default.getScript(_CTFd.default.config.urlRoot + challenge_data.type_data.scripts.view, function () {\n (0, _jquery.default)(\"#challenge-window\").empty();\n (0, _jquery.default)(\"#challenge-window\").append(challenge_data.view);\n (0, _jquery.default)(\"#challenge-window #challenge-input\").addClass(\"form-control\");\n (0, _jquery.default)(\"#challenge-window #challenge-submit\").addClass(\"btn btn-md btn-outline-secondary float-right\");\n (0, _jquery.default)(\".challenge-solves\").hide();\n (0, _jquery.default)(\".nav-tabs a\").click(function (e) {\n e.preventDefault();\n (0, _jquery.default)(this).tab(\"show\");\n }); // Handle modal toggling\n\n (0, _jquery.default)(\"#challenge-window\").on(\"hide.bs.modal\", function (_event) {\n (0, _jquery.default)(\"#challenge-input\").removeClass(\"wrong\");\n (0, _jquery.default)(\"#challenge-input\").removeClass(\"correct\");\n (0, _jquery.default)(\"#incorrect-key\").slideUp();\n (0, _jquery.default)(\"#correct-key\").slideUp();\n (0, _jquery.default)(\"#already-solved\").slideUp();\n (0, _jquery.default)(\"#too-fast\").slideUp();\n });\n (0, _jquery.default)(\".load-hint\").on(\"click\", function (_event) {\n loadHint((0, _jquery.default)(this).data(\"hint-id\"));\n });\n (0, _jquery.default)(\"#challenge-submit\").click(function (e) {\n e.preventDefault();\n (0, _jquery.default)(\"#challenge-submit\").addClass(\"disabled-button\");\n (0, _jquery.default)(\"#challenge-submit\").prop(\"disabled\", true);\n\n _CTFd.default._internal.challenge.submit(true).then(renderSubmissionResponse); // Preview passed as true\n\n });\n (0, _jquery.default)(\"#challenge-input\").keyup(function (event) {\n if (event.keyCode == 13) {\n (0, _jquery.default)(\"#challenge-submit\").click();\n }\n });\n challenge.postRender();\n window.location.replace(window.location.href.split(\"#\")[0] + \"#preview\");\n (0, _jquery.default)(\"#challenge-window\").modal();\n });\n });\n });\n (0, _jquery.default)(\".delete-challenge\").click(function (_e) {\n (0, _ezq.ezQuery)({\n title: \"Delete Challenge\",\n body: \"Are you sure you want to delete {0}\".format(\"\" + (0, _utils.htmlEntities)(window.CHALLENGE_NAME) + \"\"),\n success: function success() {\n _CTFd.default.fetch(\"/api/v1/challenges/\" + window.CHALLENGE_ID, {\n method: \"DELETE\"\n }).then(function (response) {\n return response.json();\n }).then(function (response) {\n if (response.success) {\n window.location = _CTFd.default.config.urlRoot + \"/admin/challenges\";\n }\n });\n }\n });\n });\n (0, _jquery.default)(\"#challenge-update-container > form\").submit(function (e) {\n e.preventDefault();\n var params = (0, _jquery.default)(e.target).serializeJSON(true);\n\n _CTFd.default.fetch(\"/api/v1/challenges/\" + window.CHALLENGE_ID + \"/flags\", {\n method: \"GET\",\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n }\n }).then(function (response) {\n return response.json();\n }).then(function (response) {\n var update_challenge = function update_challenge() {\n _CTFd.default.fetch(\"/api/v1/challenges/\" + window.CHALLENGE_ID, {\n method: \"PATCH\",\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(params)\n }).then(function (response) {\n return response.json();\n }).then(function (response) {\n if (response.success) {\n (0, _jquery.default)(\".challenge-state\").text(response.data.state);\n\n switch (response.data.state) {\n case \"visible\":\n (0, _jquery.default)(\".challenge-state\").removeClass(\"badge-danger\").addClass(\"badge-success\");\n break;\n\n case \"hidden\":\n (0, _jquery.default)(\".challenge-state\").removeClass(\"badge-success\").addClass(\"badge-danger\");\n break;\n\n default:\n break;\n }\n\n (0, _ezq.ezToast)({\n title: \"Success\",\n body: \"Your challenge has been updated!\"\n });\n }\n });\n }; // Check if the challenge doesn't have any flags before marking visible\n\n\n if (response.data.length === 0 && params.state === \"visible\") {\n (0, _ezq.ezQuery)({\n title: \"Missing Flags\",\n body: \"This challenge does not have any flags meaning it may be unsolveable. Are you sure you'd like to update this challenge?\",\n success: update_challenge\n });\n } else {\n update_challenge();\n }\n });\n });\n (0, _jquery.default)(\"#challenge-create-options form\").submit(handleChallengeOptions);\n (0, _jquery.default)(\"#tags-add-input\").keyup(_tags.addTag);\n (0, _jquery.default)(\".delete-tag\").click(_tags.deleteTag);\n (0, _jquery.default)(\"#prerequisite-add-form\").submit(_requirements.addRequirement);\n (0, _jquery.default)(\".delete-requirement\").click(_requirements.deleteRequirement);\n (0, _jquery.default)(\"#file-add-form\").submit(_files.addFile);\n (0, _jquery.default)(\".delete-file\").click(_files.deleteFile);\n (0, _jquery.default)(\"#hint-add-button\").click(_hints.showHintModal);\n (0, _jquery.default)(\".delete-hint\").click(_hints.deleteHint);\n (0, _jquery.default)(\".edit-hint\").click(_hints.showEditHintModal);\n (0, _jquery.default)(\"#hint-edit-form\").submit(_hints.editHint);\n (0, _jquery.default)(\"#flag-add-button\").click(_flags.addFlagModal);\n (0, _jquery.default)(\".delete-flag\").click(_flags.deleteFlag);\n (0, _jquery.default)(\"#flags-create-select\").change(_flags.flagTypeSelect);\n (0, _jquery.default)(\".edit-flag\").click(_flags.editFlagModal);\n\n _jquery.default.get(_CTFd.default.config.urlRoot + \"/api/v1/challenges/types\", function (response) {\n var data = response.data;\n loadChalTemplate(data[\"standard\"]);\n (0, _jquery.default)(\"#create-chals-select input[name=type]\").change(function () {\n var challenge = data[this.value];\n loadChalTemplate(challenge);\n });\n });\n});\n\n//# sourceURL=webpack:///./CTFd/themes/admin/assets/js/pages/challenge.js?"); /***/ }) diff --git a/CTFd/themes/admin/static/js/pages/challenge.min.js b/CTFd/themes/admin/static/js/pages/challenge.min.js index 914d7f15..d302d810 100644 --- a/CTFd/themes/admin/static/js/pages/challenge.min.js +++ b/CTFd/themes/admin/static/js/pages/challenge.min.js @@ -1 +1 @@ -!function(d){function e(e){for(var t,o,n=e[0],a=e[1],s=e[2],i=0,l=[];i -- ");for(var a in o.append(n),t)t.hasOwnProperty(a)&&(n=(0,s.default)("".format(a,t[a].name)),o.append(n));(0,s.default)("#flag-edit-modal").modal()}),(0,s.default)("#flag-edit-modal form").submit(function(e){e.preventDefault();var t=(0,s.default)(this).serializeJSON(!0);t.challenge=window.CHALLENGE_ID,i.default.fetch("/api/v1/flags",{method:"POST",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(t)}).then(function(e){return e.json()}).then(function(e){window.location.reload()})}),(0,s.default)("#flag-edit-modal").modal()},t.editFlagModal=function(e){e.preventDefault();var n=(0,s.default)(this).attr("flag-id"),a=(0,s.default)(this).parent().parent();s.default.get(i.default.config.urlRoot+"/api/v1/flags/"+n,function(e){var o=e.data;s.default.get(i.default.config.urlRoot+o.templates.update,function(e){(0,s.default)("#edit-flags form").empty(),(0,s.default)("#edit-flags form").off();var t=l.default.compile(e);(0,s.default)("#edit-flags form").append(t.render(o)),(0,s.default)("#edit-flags form").submit(function(e){e.preventDefault();var t=(0,s.default)("#edit-flags form").serializeJSON();i.default.fetch("/api/v1/flags/"+n,{method:"PATCH",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(t)}).then(function(e){return e.json()}).then(function(e){e.success&&((0,s.default)(a).find(".flag-content").text(e.data.content),(0,s.default)("#edit-flags").modal("toggle"))})}),(0,s.default)("#edit-flags").modal()})})},t.flagTypeSelect=function(e){e.preventDefault();var t=(0,s.default)(this).find("option:selected").text();s.default.get(i.default.config.urlRoot+"/api/v1/flags/types/"+t,function(e){var t=e.data;s.default.get(i.default.config.urlRoot+t.templates.create,function(e){var t=l.default.compile(e);(0,s.default)("#create-keys-entry-div").html(t.render()),(0,s.default)("#create-keys-button-div").show()})})};var s=a(o("./node_modules/jquery/dist/jquery.js")),i=a(o("./CTFd/themes/core/assets/js/CTFd.js")),l=a(o("./node_modules/nunjucks/browser/nunjucks.js")),n=o("./CTFd/themes/core/assets/js/ezq.js");function a(e){return e&&e.__esModule?e:{default:e}}},"./CTFd/themes/admin/assets/js/challenges/hints.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.showHintModal=function(e){e.preventDefault(),(0,a.default)("#hint-edit-modal form").find("input, textarea").val("").trigger("change"),(0,a.default)("#hint-edit-form textarea").each(function(e,t){t.hasOwnProperty("codemirror")&&t.codemirror.refresh()}),(0,a.default)("#hint-edit-modal").modal()},t.showEditHintModal=function(e){e.preventDefault();var t=(0,a.default)(this).attr("hint-id");s.default.fetch("/api/v1/hints/"+t+"?preview=true",{method:"GET",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"}}).then(function(e){return e.json()}).then(function(e){e.success&&((0,a.default)("#hint-edit-form input[name=content],textarea[name=content]").val(e.data.content).trigger("change"),(0,a.default)("#hint-edit-modal").on("shown.bs.modal",function(){(0,a.default)("#hint-edit-form textarea").each(function(e,t){t.hasOwnProperty("codemirror")&&t.codemirror.refresh()})}).on("hide.bs.modal",function(){(0,a.default)("#hint-edit-form textarea").each(function(e,t){(0,a.default)(t).val("").trigger("change"),t.hasOwnProperty("codemirror")&&t.codemirror.refresh()})}),(0,a.default)("#hint-edit-form input[name=cost]").val(e.data.cost),(0,a.default)("#hint-edit-form input[name=id]").val(e.data.id),(0,a.default)("#hint-edit-modal").modal())})},t.deleteHint=function(e){e.preventDefault();var t=(0,a.default)(this).attr("hint-id"),o=(0,a.default)(this).parent().parent();(0,n.ezQuery)({title:"Delete Hint",body:"Are you sure you want to delete this hint?",success:function(){s.default.fetch("/api/v1/hints/"+t,{method:"DELETE"}).then(function(e){return e.json()}).then(function(e){e.success&&o.remove()})}})},t.editHint=function(e){e.preventDefault();var t=(0,a.default)(this).serializeJSON(!0);t.challenge=window.CHALLENGE_ID;var o="POST",n="/api/v1/hints";t.id&&(o="PATCH",n="/api/v1/hints/"+t.id);s.default.fetch(n,{method:o,credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(t)}).then(function(e){return e.json()}).then(function(e){e.success&&window.location.reload()})};var a=i(o("./node_modules/jquery/dist/jquery.js")),s=i(o("./CTFd/themes/core/assets/js/CTFd.js")),n=o("./CTFd/themes/core/assets/js/ezq.js");function i(e){return e&&e.__esModule?e:{default:e}}},"./CTFd/themes/admin/assets/js/challenges/requirements.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.addRequirement=function(e){e.preventDefault();var t=(0,a.default)("#prerequisite-add-form").serializeJSON();if(!t.prerequisite)return;window.CHALLENGE_REQUIREMENTS.prerequisites.push(parseInt(t.prerequisite));var o={requirements:window.CHALLENGE_REQUIREMENTS};s.default.fetch("/api/v1/challenges/"+window.CHALLENGE_ID,{method:"PATCH",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(o)}).then(function(e){return e.json()}).then(function(e){e.success&&window.location.reload()})},t.deleteRequirement=function(e){var t=(0,a.default)(this).attr("challenge-id"),o=(0,a.default)(this).parent().parent();window.CHALLENGE_REQUIREMENTS.prerequisites.pop(t);var n={requirements:window.CHALLENGE_REQUIREMENTS};s.default.fetch("/api/v1/challenges/"+window.CHALLENGE_ID,{method:"PATCH",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(n)}).then(function(e){return e.json()}).then(function(e){e.success&&o.remove()})};var a=n(o("./node_modules/jquery/dist/jquery.js")),s=n(o("./CTFd/themes/core/assets/js/CTFd.js"));function n(e){return e&&e.__esModule?e:{default:e}}},"./CTFd/themes/admin/assets/js/challenges/tags.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.deleteTag=i,t.addTag=function(e){if(13!=e.keyCode)return;var t=(0,n.default)(this),o={value:t.val(),challenge:window.CHALLENGE_ID};a.default.api.post_tag_list({},o).then(function(e){if(e.success){var t=(0,n.default)("{0}×".format(e.data.value,e.data.id));(0,n.default)("#challenge-tags").append(t),t.click(i)}}),t.val("")};var n=s(o("./node_modules/jquery/dist/jquery.js")),a=s(o("./CTFd/themes/core/assets/js/CTFd.js"));function s(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=(0,n.default)(this),o=t.attr("tag-id");a.default.api.delete_tag({tagId:o}).then(function(e){e.success&&t.parent().remove()})}},"./CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue":function(e,t,o){o.r(t);var n=o("./CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue?vue&type=template&id=50f8d42a&"),a=o("./CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue?vue&type=script&lang=js&");for(var s in a)"default"!==s&&function(e){o.d(t,e,function(){return a[e]})}(s);var i=o("./node_modules/vue-loader/lib/runtime/componentNormalizer.js"),l=Object(i.a)(a.default,n.a,n.b,!1,null,null,null);l.options.__file="CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue",t.default=l.exports},"./CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue?vue&type=script&lang=js&":function(e,t,o){o.r(t);var n=o("./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue?vue&type=script&lang=js&"),a=o.n(n);for(var s in n)"default"!==s&&function(e){o.d(t,e,function(){return n[e]})}(s);t.default=a.a},"./CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue?vue&type=template&id=50f8d42a&":function(e,t,o){function n(){var o=this,e=o.$createElement,n=o._self._c||e;return n("div",{staticClass:"modal fade",attrs:{id:"media-modal",tabindex:"-1"}},[n("div",{staticClass:"modal-dialog modal-lg"},[n("div",{staticClass:"modal-content"},[o._m(0),o._v(" "),n("div",{staticClass:"modal-body"},[n("div",{staticClass:"modal-header"},[n("div",{staticClass:"container"},[n("div",{staticClass:"row mh-100"},[n("div",{staticClass:"col-md-6",attrs:{id:"media-library-list"}},o._l(o.files,function(t){return n("div",{key:t.id,staticClass:"media-item-wrapper"},[n("a",{attrs:{href:"javascript:void(0)"},on:{click:function(e){return o.selectFile(t),!1}}},[n("i",{class:o.getIconClass(t.location),attrs:{"aria-hidden":"true"}}),o._v(" "),n("small",{staticClass:"media-item-title"},[o._v(o._s(t.location.split("/").pop()))])])])}),0),o._v(" "),n("div",{staticClass:"col-md-6",attrs:{id:"media-library-details"}},[n("h4",{staticClass:"text-center"},[o._v("Media Details")]),o._v(" "),n("div",{attrs:{id:"media-item"}},[n("div",{staticClass:"text-center",attrs:{id:"media-icon"}},[this.selectedFile?n("div",["far fa-file-image"===o.getIconClass(this.selectedFile.location)?n("div",[n("img",{staticStyle:{"max-width":"100%","max-height":"100%","object-fit":"contain"},attrs:{src:o.buildSelectedFileUrl()}})]):n("div",[n("i",{class:o.getIconClass(this.selectedFile.location)+" fa-4x",attrs:{"aria-hidden":"true"}})])]):o._e()]),o._v(" "),n("br"),o._v(" "),this.selectedFile?n("div",{staticClass:"text-center",attrs:{id:"media-filename"}},[n("a",{attrs:{href:o.buildSelectedFileUrl(),target:"_blank"}},[o._v("\n "+o._s(this.selectedFile.location.split("/").pop())+"\n ")])]):o._e(),o._v(" "),n("br"),o._v(" "),n("div",{staticClass:"form-group"},[this.selectedFile?n("div",[o._v("\n Link:\n "),n("input",{staticClass:"form-control",attrs:{type:"text",id:"media-link",readonly:""},domProps:{value:o.buildSelectedFileUrl()}})]):n("div",[o._v("\n Link:\n "),n("input",{staticClass:"form-control",attrs:{type:"text",id:"media-link",readonly:""}})])]),o._v(" "),n("div",{staticClass:"form-group text-center"},[n("div",{staticClass:"row"},[n("div",{staticClass:"col-md-6"},[n("button",{staticClass:"btn btn-success w-100",attrs:{id:"media-insert","data-toggle":"tooltip","data-placement":"top",title:"Insert link into editor"},on:{click:o.insertSelectedFile}},[o._v("\n Insert\n ")])]),o._v(" "),n("div",{staticClass:"col-md-3"},[n("button",{staticClass:"btn btn-primary w-100",attrs:{id:"media-download","data-toggle":"tooltip","data-placement":"top",title:"Download file"},on:{click:o.downloadSelectedFile}},[n("i",{staticClass:"fas fa-download"})])]),o._v(" "),n("div",{staticClass:"col-md-3"},[n("button",{staticClass:"btn btn-danger w-100",attrs:{id:"media-delete","data-toggle":"tooltip","data-placement":"top",title:"Delete file"},on:{click:o.deleteSelectedFile}},[n("i",{staticClass:"far fa-trash-alt"})])])])])])])])])]),o._v(" "),o._m(1)]),o._v(" "),n("div",{staticClass:"modal-footer"},[n("div",{staticClass:"float-right"},[n("button",{staticClass:"btn btn-primary media-upload-button",attrs:{type:"submit"},on:{click:o.uploadChosenFiles}},[o._v("\n Upload\n ")])])])])])])}var a=[function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("div",{staticClass:"modal-header"},[o("div",{staticClass:"container"},[o("div",{staticClass:"row"},[o("div",{staticClass:"col-md-12"},[o("h3",{staticClass:"text-center"},[e._v("Media Library")])])])]),e._v(" "),o("button",{staticClass:"close",attrs:{type:"button","data-dismiss":"modal","aria-label":"Close"}},[o("span",{attrs:{"aria-hidden":"true"}},[e._v("×")])])])},function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("form",{attrs:{id:"media-library-upload",enctype:"multipart/form-data"}},[o("div",{staticClass:"form-group"},[o("label",{attrs:{for:"media-files"}},[e._v("\n Upload Files\n ")]),e._v(" "),o("input",{staticClass:"form-control-file",attrs:{type:"file",name:"file",id:"media-files",multiple:""}}),e._v(" "),o("sub",{staticClass:"help-block"},[e._v("\n Attach multiple files using Control+Click or Cmd+Click.\n ")])]),e._v(" "),o("input",{attrs:{type:"hidden",value:"page",name:"type"}})])}];n._withStripped=!0,o.d(t,"a",function(){return n}),o.d(t,"b",function(){return a})},"./CTFd/themes/admin/assets/js/pages/challenge.js":function(e,t,o){o("./CTFd/themes/admin/assets/js/pages/main.js");var n=o("./CTFd/themes/core/assets/js/utils.js"),i=f(o("./node_modules/jquery/dist/jquery.js"));o("./node_modules/bootstrap/js/dist/tab.js");var l=f(o("./CTFd/themes/core/assets/js/CTFd.js")),a=o("./CTFd/themes/core/assets/js/ezq.js"),d=f(o("./CTFd/themes/core/assets/js/helpers.js")),s=o("./CTFd/themes/admin/assets/js/challenges/files.js"),r=o("./CTFd/themes/admin/assets/js/challenges/tags.js"),c=o("./CTFd/themes/admin/assets/js/challenges/requirements.js"),u=o("./CTFd/themes/admin/assets/js/styles.js"),m=o("./CTFd/themes/admin/assets/js/challenges/hints.js"),p=o("./CTFd/themes/admin/assets/js/challenges/flags.js");function f(e){return e&&e.__esModule?e:{default:e}}function h(e){l.default.api.get_hint({hintId:e,preview:!0}).then(function(e){e.data.content&&function(e){(0,a.ezAlert)({title:"Hint",body:j.render(e.content),button:"Got it!"})}(e.data)})}var j=l.default.lib.markdown();function g(e,t){var o=e.data,n=(0,i.default)("#result-message"),a=(0,i.default)("#result-notification"),s=(0,i.default)("#submission-input");a.removeClass(),n.text(o.message),"authentication_required"!==o.status?("incorrect"===o.status?(a.addClass("alert alert-danger alert-dismissable text-center"),a.slideDown(),s.removeClass("correct"),s.addClass("wrong"),setTimeout(function(){s.removeClass("wrong")},3e3)):"correct"===o.status?(a.addClass("alert alert-success alert-dismissable text-center"),a.slideDown(),(0,i.default)(".challenge-solves").text(parseInt((0,i.default)(".challenge-solves").text().split(" ")[0])+1+" Solves"),s.val(""),s.removeClass("wrong"),s.addClass("correct")):"already_solved"===o.status?(a.addClass("alert alert-info alert-dismissable text-center"),a.slideDown(),s.addClass("correct")):"paused"===o.status?(a.addClass("alert alert-warning alert-dismissable text-center"),a.slideDown()):"ratelimited"===o.status&&(a.addClass("alert alert-warning alert-dismissable text-center"),a.slideDown(),s.addClass("too-fast"),setTimeout(function(){s.removeClass("too-fast")},3e3)),setTimeout(function(){(0,i.default)(".alert").slideUp(),(0,i.default)("#submit-key").removeClass("disabled-button"),(0,i.default)("#submit-key").prop("disabled",!1)},3e3),t&&t(o)):window.location=l.default.config.urlRoot+"/login?next="+l.default.config.urlRoot+window.location.pathname+window.location.hash}function _(t){l.default._internal.challenge={},i.default.getScript(l.default.config.urlRoot+t.scripts.view,function(){var e=t.create;(0,i.default)("#create-chal-entry-div").html(e),(0,u.bindMarkdownEditors)(),i.default.getScript(l.default.config.urlRoot+t.scripts.create,function(){(0,i.default)("#create-chal-entry-div form").submit(function(e){e.preventDefault();var t=(0,i.default)("#create-chal-entry-div form").serializeJSON();l.default.fetch("/api/v1/challenges",{method:"POST",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(t)}).then(function(e){return e.json()}).then(function(e){e.success&&((0,i.default)("#challenge-create-options #challenge_id").val(e.data.id),(0,i.default)("#challenge-create-options").modal())})})})})}function v(a){a.preventDefault();var s=(0,i.default)(a.target).serializeJSON(!0),o={challenge_id:s.challenge_id,content:s.flag||"",type:s.flag_type,data:s.flag_data?s.flag_data:""};Promise.all([new Promise(function(t,e){0!=o.content.length?l.default.fetch("/api/v1/flags",{method:"POST",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(o)}).then(function(e){t(e.json())}):t()}),new Promise(function(e,t){var o=a.target,n={challenge:s.challenge_id,type:"challenge"};(0,i.default)(o.elements.file).val()&&d.default.files.upload(o,n),e()})]).then(function(e){l.default.fetch("/api/v1/challenges/"+s.challenge_id,{method:"PATCH",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({state:s.state})}).then(function(e){return e.json()}).then(function(e){e.success&&setTimeout(function(){window.location=l.default.config.urlRoot+"/admin/challenges/"+s.challenge_id},700)})})}(0,i.default)(function(){(0,i.default)(".preview-challenge").click(function(e){window.challenge=new Object,l.default._internal.challenge={},i.default.get(l.default.config.urlRoot+"/api/v1/challenges/"+window.CHALLENGE_ID,function(e){var t=l.default._internal.challenge,o=e.data;o.solves=null,i.default.getScript(l.default.config.urlRoot+o.type_data.scripts.view,function(){(0,i.default)("#challenge-window").empty(),(0,i.default)("#challenge-window").append(o.view),(0,i.default)("#challenge-window #challenge-input").addClass("form-control"),(0,i.default)("#challenge-window #challenge-submit").addClass("btn btn-md btn-outline-secondary float-right"),(0,i.default)(".challenge-solves").hide(),(0,i.default)(".nav-tabs a").click(function(e){e.preventDefault(),(0,i.default)(this).tab("show")}),(0,i.default)("#challenge-window").on("hide.bs.modal",function(e){(0,i.default)("#challenge-input").removeClass("wrong"),(0,i.default)("#challenge-input").removeClass("correct"),(0,i.default)("#incorrect-key").slideUp(),(0,i.default)("#correct-key").slideUp(),(0,i.default)("#already-solved").slideUp(),(0,i.default)("#too-fast").slideUp()}),(0,i.default)(".load-hint").on("click",function(e){h((0,i.default)(this).data("hint-id"))}),(0,i.default)("#challenge-submit").click(function(e){e.preventDefault(),(0,i.default)("#challenge-submit").addClass("disabled-button"),(0,i.default)("#challenge-submit").prop("disabled",!0),l.default._internal.challenge.submit(!0).then(g)}),(0,i.default)("#challenge-input").keyup(function(e){13==e.keyCode&&(0,i.default)("#challenge-submit").click()}),t.postRender(),window.location.replace(window.location.href.split("#")[0]+"#preview"),(0,i.default)("#challenge-window").modal()})})}),(0,i.default)(".delete-challenge").click(function(e){(0,a.ezQuery)({title:"Delete Challenge",body:"Are you sure you want to delete {0}".format(""+(0,n.htmlEntities)(window.CHALLENGE_NAME)+""),success:function(){l.default.fetch("/api/v1/challenges/"+window.CHALLENGE_ID,{method:"DELETE"}).then(function(e){return e.json()}).then(function(e){e.success&&(window.location=l.default.config.urlRoot+"/admin/challenges")})}})}),(0,i.default)("#challenge-update-container > form").submit(function(e){e.preventDefault();var o=(0,i.default)(e.target).serializeJSON(!0);l.default.fetch("/api/v1/challenges/"+window.CHALLENGE_ID+"/flags",{method:"GET",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"}}).then(function(e){return e.json()}).then(function(e){function t(){l.default.fetch("/api/v1/challenges/"+window.CHALLENGE_ID,{method:"PATCH",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(o)}).then(function(e){return e.json()}).then(function(e){if(e.success){switch((0,i.default)(".challenge-state").text(e.data.state),e.data.state){case"visible":(0,i.default)(".challenge-state").removeClass("badge-danger").addClass("badge-success");break;case"hidden":(0,i.default)(".challenge-state").removeClass("badge-success").addClass("badge-danger")}(0,a.ezToast)({title:"Success",body:"Your challenge has been updated!"})}})}0===e.data.length&&"visible"===o.state?(0,a.ezQuery)({title:"Missing Flags",body:"This challenge does not have any flags meaning it may be unsolveable. Are you sure you'd like to update this challenge?",success:t}):t()})}),(0,i.default)("#challenge-create-options form").submit(v),(0,i.default)("#tags-add-input").keyup(r.addTag),(0,i.default)(".delete-tag").click(r.deleteTag),(0,i.default)("#prerequisite-add-form").submit(c.addRequirement),(0,i.default)(".delete-requirement").click(c.deleteRequirement),(0,i.default)("#file-add-form").submit(s.addFile),(0,i.default)(".delete-file").click(s.deleteFile),(0,i.default)("#hint-add-button").click(m.showHintModal),(0,i.default)(".delete-hint").click(m.deleteHint),(0,i.default)(".edit-hint").click(m.showEditHintModal),(0,i.default)("#hint-edit-form").submit(m.editHint),(0,i.default)("#flag-add-button").click(p.addFlagModal),(0,i.default)(".delete-flag").click(p.deleteFlag),(0,i.default)("#flags-create-select").change(p.flagTypeSelect),(0,i.default)(".edit-flag").click(p.editFlagModal),i.default.get(l.default.config.urlRoot+"/api/v1/challenges/types",function(e){var t=e.data;_(t.standard),(0,i.default)("#create-chals-select input[name=type]").change(function(){_(t[this.value])})})})},"./CTFd/themes/admin/assets/js/pages/main.js":function(e,t,o){var n=m(o("./CTFd/themes/core/assets/js/CTFd.js")),a=m(o("./node_modules/jquery/dist/jquery.js")),s=m(o("./node_modules/moment/moment.js")),i=m(o("./node_modules/nunjucks/browser/nunjucks.js")),l=o("./node_modules/howler/dist/howler.js"),d=m(o("./CTFd/themes/core/assets/js/events.js")),r=m(o("./CTFd/themes/core/assets/js/times.js")),c=m(o("./CTFd/themes/admin/assets/js/styles.js")),u=m(o("./CTFd/themes/core/assets/js/helpers.js"));function m(e){return e&&e.__esModule?e:{default:e}}n.default.init(window.init),window.CTFd=n.default,window.helpers=u.default,window.$=a.default,window.Moment=s.default,window.nunjucks=i.default,window.Howl=l.Howl,(0,a.default)(function(){(0,c.default)(),(0,r.default)(),(0,d.default)(n.default.config.urlRoot)})},"./CTFd/themes/admin/assets/js/styles.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.showMediaLibrary=r,t.bindMarkdownEditors=c,t.default=void 0,o("./node_modules/bootstrap/dist/js/bootstrap.bundle.js");var n=o("./CTFd/themes/core/assets/js/utils.js"),a=d(o("./node_modules/jquery/dist/jquery.js")),s=d(o("./node_modules/easymde/src/js/easymde.js")),i=d(o("./node_modules/vue/dist/vue.esm.browser.js")),l=d(o("./CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue"));function d(e){return e&&e.__esModule?e:{default:e}}function r(e){var t=i.default.extend(l.default),o=document.createElement("div");document.querySelector("main").appendChild(o);var n=new t({propsData:{editor:e}}).$mount(o);(0,a.default)("#media-modal").on("hidden.bs.modal",function(e){n.$destroy(),(0,a.default)("#media-modal").remove()}),(0,a.default)("#media-modal").modal()}function c(){(0,a.default)("textarea.markdown").each(function(e,t){if(!1===t.hasOwnProperty("mde")){var o=new s.default({autoDownloadFontAwesome:!1,toolbar:["bold","italic","heading","|","quote","unordered-list","ordered-list","|","link","image",{name:"media",action:function(e){r(e)},className:"fas fa-file-upload",title:"Media Library"},"|","preview","guide"],element:this,initialValue:(0,a.default)(this).val(),forceSync:!0,minHeight:"200px"});this.mde=o,this.codemirror=o.codemirror,(0,a.default)(this).on("change keyup paste",function(){o.codemirror.getDoc().setValue((0,a.default)(this).val()),o.codemirror.refresh()})}})}t.default=function(){(0,a.default)(":input").each(function(){(0,a.default)(this).data("initial",(0,a.default)(this).val())}),(0,a.default)(function(){(0,a.default)("tr[data-href], td[data-href]").click(function(){if(!getSelection().toString()){var e=(0,a.default)(this).attr("data-href");e&&(window.location=e)}return!1}),(0,a.default)("[data-checkbox]").click(function(e){(0,a.default)(e.target).is("input[type=checkbox]")?e.stopImmediatePropagation():((0,a.default)(this).find("input[type=checkbox]").click(),e.stopImmediatePropagation())}),(0,a.default)("[data-checkbox-all]").on("click change",function(e){var t=(0,a.default)(this).prop("checked"),o=(0,a.default)(this).index()+1;(0,a.default)(this).closest("table").find("tr td:nth-child(".concat(o,") input[type=checkbox]")).prop("checked",t),e.stopImmediatePropagation()}),(0,a.default)("tr[data-href] a, tr[data-href] button").click(function(e){(0,a.default)(this).attr("data-dismiss")||e.stopPropagation()}),(0,a.default)(".page-select").change(function(){var e=new URL(window.location);e.searchParams.set("page",this.value),window.location.href=e.toString()}),(0,a.default)('a[data-toggle="tab"]').on("shown.bs.tab",function(e){sessionStorage.setItem("activeTab",(0,a.default)(e.target).attr("href"))});var e=sessionStorage.getItem("activeTab");if(e){var t=(0,a.default)('.nav-tabs a[href="'.concat(e,'"], .nav-pills a[href="').concat(e,'"]'));t.length?t.tab("show"):sessionStorage.removeItem("activeTab")}c(),(0,n.makeSortableTables)(),(0,a.default)('[data-toggle="tooltip"]').tooltip()})}},"./CTFd/themes/core/assets/js/CTFd.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(o("./CTFd/themes/core/assets/js/fetch.js")),a=r(o("./CTFd/themes/core/assets/js/config.js")),s=o("./CTFd/themes/core/assets/js/api.js");o("./CTFd/themes/core/assets/js/patch.js");var i=r(o("./node_modules/markdown-it/index.js")),l=r(o("./node_modules/jquery/dist/jquery.js")),d=r(o("./CTFd/themes/core/assets/js/ezq.js"));function r(e){return e&&e.__esModule?e:{default:e}}function c(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}var u=new s.API("/"),m={},p={ezq:d.default},f={$:l.default,markdown:function(e){var t=function(t){for(var e=1;e".concat(e.body,"

")):o.find(".modal-body").append((0,l.default)(e.body));var n=(0,l.default)(c.format(e.button));return e.success&&(0,l.default)(n).click(function(){e.success()}),e.large&&o.find(".modal-dialog").addClass("modal-lg"),o.find(".modal-footer").append(n),(0,l.default)("main").append(o),o.modal("show"),(0,l.default)(o).on("hidden.bs.modal",function(){(0,l.default)(this).modal("dispose")}),o}function f(e){(0,l.default)("#ezq--notifications-toast-container").length||(0,l.default)("body").append((0,l.default)("
").attr({id:"ezq--notifications-toast-container"}).css({position:"fixed",bottom:"0",right:"0","min-width":"20%"}));var t=d.format(e.title,e.body),o=(0,l.default)(t);if(e.onclose&&(0,l.default)(o).find("button[data-dismiss=toast]").click(function(){e.onclose()}),e.onclick){var n=(0,l.default)(o).find(".toast-body");n.addClass("cursor-pointer"),n.click(function(){e.onclick()})}var a=!1!==e.autohide,s=!1!==e.animation,i=e.delay||1e4;return(0,l.default)("#ezq--notifications-toast-container").prepend(o),o.toast({autohide:a,delay:i,animation:s}),o.toast("show"),o}function h(e){var t=s.format(e.title),o=(0,l.default)(t);"string"==typeof e.body?o.find(".modal-body").append("

".concat(e.body,"

")):o.find(".modal-body").append((0,l.default)(e.body));var n=(0,l.default)(m),a=(0,l.default)(u);return o.find(".modal-footer").append(a),o.find(".modal-footer").append(n),(0,l.default)("main").append(o),(0,l.default)(o).on("hidden.bs.modal",function(){(0,l.default)(this).modal("dispose")}),(0,l.default)(n).click(function(){e.success()}),o.modal("show"),o}function j(e){if(e.target){var t=(0,l.default)(e.target);return t.find(".progress-bar").css("width",e.width+"%"),t}var o=i.format(e.width),n=s.format(e.title),a=(0,l.default)(n);return a.find(".modal-body").append((0,l.default)(o)),(0,l.default)("main").append(a),a.modal("show")}function g(e){var t={success:r,error:a}[e.type].format(e.body);return(0,l.default)(t)}var _={ezAlert:p,ezToast:f,ezQuery:h,ezProgressBar:j,ezBadge:g};t.default=_},"./CTFd/themes/core/assets/js/fetch.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,o("./node_modules/whatwg-fetch/fetch.js");var n,a=(n=o("./CTFd/themes/core/assets/js/config.js"))&&n.__esModule?n:{default:n};var s=window.fetch;t.default=function(e,t){return void 0===t&&(t={method:"GET",credentials:"same-origin",headers:{}}),e=a.default.urlRoot+e,void 0===t.headers&&(t.headers={}),t.credentials="same-origin",t.headers.Accept="application/json",t.headers["Content-Type"]="application/json",t.headers["CSRF-Token"]=a.default.csrfNonce,s(e,t)}},"./CTFd/themes/core/assets/js/patch.js":function(e,t,o){var n,l=(n=o("./node_modules/q/q.js"))&&n.__esModule?n:{default:n},a=o("./CTFd/themes/core/assets/js/api.js");function s(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function d(e,t){return function(t){for(var e=1;e>4*a&255).toString(16)).substr(-2)}return n},t.htmlEntities=function(e){return(0,i.default)("
").text(e).html()},t.cumulativeSum=function(e){for(var t=e.concat(),o=0;o'),(0,i.default)("th.sort-col").click(function(){var e=(0,i.default)(this).parents("table").eq(0),t=e.find("tr:gt(0)").toArray().sort(function(a){return function(e,t){var o=s(e,a),n=s(t,a);return i.default.isNumeric(o)&&i.default.isNumeric(n)?o-n:o.toString().localeCompare(n)}}((0,i.default)(this).index()));this.asc=!this.asc,this.asc||(t=t.reverse());for(var o=0;o -- ");for(var a in o.append(n),t)t.hasOwnProperty(a)&&(n=(0,s.default)("".format(a,t[a].name)),o.append(n));(0,s.default)("#flag-edit-modal").modal()}),(0,s.default)("#flag-edit-modal form").submit(function(e){e.preventDefault();var t=(0,s.default)(this).serializeJSON(!0);t.challenge=window.CHALLENGE_ID,i.default.fetch("/api/v1/flags",{method:"POST",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(t)}).then(function(e){return e.json()}).then(function(e){window.location.reload()})}),(0,s.default)("#flag-edit-modal").modal()},t.editFlagModal=function(e){e.preventDefault();var n=(0,s.default)(this).attr("flag-id"),a=(0,s.default)(this).parent().parent();s.default.get(i.default.config.urlRoot+"/api/v1/flags/"+n,function(e){var o=e.data;s.default.get(i.default.config.urlRoot+o.templates.update,function(e){(0,s.default)("#edit-flags form").empty(),(0,s.default)("#edit-flags form").off();var t=l.default.compile(e);(0,s.default)("#edit-flags form").append(t.render(o)),(0,s.default)("#edit-flags form").submit(function(e){e.preventDefault();var t=(0,s.default)("#edit-flags form").serializeJSON();i.default.fetch("/api/v1/flags/"+n,{method:"PATCH",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(t)}).then(function(e){return e.json()}).then(function(e){e.success&&((0,s.default)(a).find(".flag-content").text(e.data.content),(0,s.default)("#edit-flags").modal("toggle"))})}),(0,s.default)("#edit-flags").modal()})})},t.flagTypeSelect=function(e){e.preventDefault();var t=(0,s.default)(this).find("option:selected").text();s.default.get(i.default.config.urlRoot+"/api/v1/flags/types/"+t,function(e){var t=e.data;s.default.get(i.default.config.urlRoot+t.templates.create,function(e){var t=l.default.compile(e);(0,s.default)("#create-keys-entry-div").html(t.render()),(0,s.default)("#create-keys-button-div").show()})})};var s=a(o("./node_modules/jquery/dist/jquery.js")),i=a(o("./CTFd/themes/core/assets/js/CTFd.js")),l=a(o("./node_modules/nunjucks/browser/nunjucks.js")),n=o("./CTFd/themes/core/assets/js/ezq.js");function a(e){return e&&e.__esModule?e:{default:e}}},"./CTFd/themes/admin/assets/js/challenges/hints.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.showHintModal=function(e){e.preventDefault(),(0,a.default)("#hint-edit-modal form").find("input, textarea").val("").trigger("change"),(0,a.default)("#hint-edit-form textarea").each(function(e,t){t.hasOwnProperty("codemirror")&&t.codemirror.refresh()}),(0,a.default)("#hint-edit-modal").modal()},t.showEditHintModal=function(e){e.preventDefault();var t=(0,a.default)(this).attr("hint-id");s.default.fetch("/api/v1/hints/"+t+"?preview=true",{method:"GET",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"}}).then(function(e){return e.json()}).then(function(e){e.success&&((0,a.default)("#hint-edit-form input[name=content],textarea[name=content]").val(e.data.content).trigger("change"),(0,a.default)("#hint-edit-modal").on("shown.bs.modal",function(){(0,a.default)("#hint-edit-form textarea").each(function(e,t){t.hasOwnProperty("codemirror")&&t.codemirror.refresh()})}).on("hide.bs.modal",function(){(0,a.default)("#hint-edit-form textarea").each(function(e,t){(0,a.default)(t).val("").trigger("change"),t.hasOwnProperty("codemirror")&&t.codemirror.refresh()})}),(0,a.default)("#hint-edit-form input[name=cost]").val(e.data.cost),(0,a.default)("#hint-edit-form input[name=id]").val(e.data.id),(0,a.default)("#hint-edit-modal").modal())})},t.deleteHint=function(e){e.preventDefault();var t=(0,a.default)(this).attr("hint-id"),o=(0,a.default)(this).parent().parent();(0,n.ezQuery)({title:"Delete Hint",body:"Are you sure you want to delete this hint?",success:function(){s.default.fetch("/api/v1/hints/"+t,{method:"DELETE"}).then(function(e){return e.json()}).then(function(e){e.success&&o.remove()})}})},t.editHint=function(e){e.preventDefault();var t=(0,a.default)(this).serializeJSON(!0);t.challenge=window.CHALLENGE_ID;var o="POST",n="/api/v1/hints";t.id&&(o="PATCH",n="/api/v1/hints/"+t.id);s.default.fetch(n,{method:o,credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(t)}).then(function(e){return e.json()}).then(function(e){e.success&&window.location.reload()})};var a=i(o("./node_modules/jquery/dist/jquery.js")),s=i(o("./CTFd/themes/core/assets/js/CTFd.js")),n=o("./CTFd/themes/core/assets/js/ezq.js");function i(e){return e&&e.__esModule?e:{default:e}}},"./CTFd/themes/admin/assets/js/challenges/requirements.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.addRequirement=function(e){e.preventDefault();var t=(0,a.default)("#prerequisite-add-form").serializeJSON();if(!t.prerequisite)return;window.CHALLENGE_REQUIREMENTS.prerequisites.push(parseInt(t.prerequisite));var o={requirements:window.CHALLENGE_REQUIREMENTS};s.default.fetch("/api/v1/challenges/"+window.CHALLENGE_ID,{method:"PATCH",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(o)}).then(function(e){return e.json()}).then(function(e){e.success&&window.location.reload()})},t.deleteRequirement=function(e){var t=(0,a.default)(this).attr("challenge-id"),o=(0,a.default)(this).parent().parent();window.CHALLENGE_REQUIREMENTS.prerequisites.pop(t);var n={requirements:window.CHALLENGE_REQUIREMENTS};s.default.fetch("/api/v1/challenges/"+window.CHALLENGE_ID,{method:"PATCH",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(n)}).then(function(e){return e.json()}).then(function(e){e.success&&o.remove()})};var a=n(o("./node_modules/jquery/dist/jquery.js")),s=n(o("./CTFd/themes/core/assets/js/CTFd.js"));function n(e){return e&&e.__esModule?e:{default:e}}},"./CTFd/themes/admin/assets/js/challenges/tags.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.deleteTag=i,t.addTag=function(e){if(13!=e.keyCode)return;var t=(0,n.default)(this),o={value:t.val(),challenge:window.CHALLENGE_ID};a.default.api.post_tag_list({},o).then(function(e){if(e.success){var t=(0,n.default)("{0}×".format(e.data.value,e.data.id));(0,n.default)("#challenge-tags").append(t),t.click(i)}}),t.val("")};var n=s(o("./node_modules/jquery/dist/jquery.js")),a=s(o("./CTFd/themes/core/assets/js/CTFd.js"));function s(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=(0,n.default)(this),o=t.attr("tag-id");a.default.api.delete_tag({tagId:o}).then(function(e){e.success&&t.parent().remove()})}},"./CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue":function(e,t,o){o.r(t);var n=o("./CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue?vue&type=template&id=50f8d42a&"),a=o("./CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue?vue&type=script&lang=js&");for(var s in a)"default"!==s&&function(e){o.d(t,e,function(){return a[e]})}(s);var i=o("./node_modules/vue-loader/lib/runtime/componentNormalizer.js"),l=Object(i.a)(a.default,n.a,n.b,!1,null,null,null);l.options.__file="CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue",t.default=l.exports},"./CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue?vue&type=script&lang=js&":function(e,t,o){o.r(t);var n=o("./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue?vue&type=script&lang=js&"),a=o.n(n);for(var s in n)"default"!==s&&function(e){o.d(t,e,function(){return n[e]})}(s);t.default=a.a},"./CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue?vue&type=template&id=50f8d42a&":function(e,t,o){function n(){var o=this,e=o.$createElement,n=o._self._c||e;return n("div",{staticClass:"modal fade",attrs:{id:"media-modal",tabindex:"-1"}},[n("div",{staticClass:"modal-dialog modal-lg"},[n("div",{staticClass:"modal-content"},[o._m(0),o._v(" "),n("div",{staticClass:"modal-body"},[n("div",{staticClass:"modal-header"},[n("div",{staticClass:"container"},[n("div",{staticClass:"row mh-100"},[n("div",{staticClass:"col-md-6",attrs:{id:"media-library-list"}},o._l(o.files,function(t){return n("div",{key:t.id,staticClass:"media-item-wrapper"},[n("a",{attrs:{href:"javascript:void(0)"},on:{click:function(e){return o.selectFile(t),!1}}},[n("i",{class:o.getIconClass(t.location),attrs:{"aria-hidden":"true"}}),o._v(" "),n("small",{staticClass:"media-item-title"},[o._v(o._s(t.location.split("/").pop()))])])])}),0),o._v(" "),n("div",{staticClass:"col-md-6",attrs:{id:"media-library-details"}},[n("h4",{staticClass:"text-center"},[o._v("Media Details")]),o._v(" "),n("div",{attrs:{id:"media-item"}},[n("div",{staticClass:"text-center",attrs:{id:"media-icon"}},[this.selectedFile?n("div",["far fa-file-image"===o.getIconClass(this.selectedFile.location)?n("div",[n("img",{staticStyle:{"max-width":"100%","max-height":"100%","object-fit":"contain"},attrs:{src:o.buildSelectedFileUrl()}})]):n("div",[n("i",{class:o.getIconClass(this.selectedFile.location)+" fa-4x",attrs:{"aria-hidden":"true"}})])]):o._e()]),o._v(" "),n("br"),o._v(" "),this.selectedFile?n("div",{staticClass:"text-center",attrs:{id:"media-filename"}},[n("a",{attrs:{href:o.buildSelectedFileUrl(),target:"_blank"}},[o._v("\n "+o._s(this.selectedFile.location.split("/").pop())+"\n ")])]):o._e(),o._v(" "),n("br"),o._v(" "),n("div",{staticClass:"form-group"},[this.selectedFile?n("div",[o._v("\n Link:\n "),n("input",{staticClass:"form-control",attrs:{type:"text",id:"media-link",readonly:""},domProps:{value:o.buildSelectedFileUrl()}})]):n("div",[o._v("\n Link:\n "),n("input",{staticClass:"form-control",attrs:{type:"text",id:"media-link",readonly:""}})])]),o._v(" "),n("div",{staticClass:"form-group text-center"},[n("div",{staticClass:"row"},[n("div",{staticClass:"col-md-6"},[n("button",{staticClass:"btn btn-success w-100",attrs:{id:"media-insert","data-toggle":"tooltip","data-placement":"top",title:"Insert link into editor"},on:{click:o.insertSelectedFile}},[o._v("\n Insert\n ")])]),o._v(" "),n("div",{staticClass:"col-md-3"},[n("button",{staticClass:"btn btn-primary w-100",attrs:{id:"media-download","data-toggle":"tooltip","data-placement":"top",title:"Download file"},on:{click:o.downloadSelectedFile}},[n("i",{staticClass:"fas fa-download"})])]),o._v(" "),n("div",{staticClass:"col-md-3"},[n("button",{staticClass:"btn btn-danger w-100",attrs:{id:"media-delete","data-toggle":"tooltip","data-placement":"top",title:"Delete file"},on:{click:o.deleteSelectedFile}},[n("i",{staticClass:"far fa-trash-alt"})])])])])])])])])]),o._v(" "),o._m(1)]),o._v(" "),n("div",{staticClass:"modal-footer"},[n("div",{staticClass:"float-right"},[n("button",{staticClass:"btn btn-primary media-upload-button",attrs:{type:"submit"},on:{click:o.uploadChosenFiles}},[o._v("\n Upload\n ")])])])])])])}var a=[function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("div",{staticClass:"modal-header"},[o("div",{staticClass:"container"},[o("div",{staticClass:"row"},[o("div",{staticClass:"col-md-12"},[o("h3",{staticClass:"text-center"},[e._v("Media Library")])])])]),e._v(" "),o("button",{staticClass:"close",attrs:{type:"button","data-dismiss":"modal","aria-label":"Close"}},[o("span",{attrs:{"aria-hidden":"true"}},[e._v("×")])])])},function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("form",{attrs:{id:"media-library-upload",enctype:"multipart/form-data"}},[o("div",{staticClass:"form-group"},[o("label",{attrs:{for:"media-files"}},[e._v("\n Upload Files\n ")]),e._v(" "),o("input",{staticClass:"form-control-file",attrs:{type:"file",name:"file",id:"media-files",multiple:""}}),e._v(" "),o("sub",{staticClass:"help-block"},[e._v("\n Attach multiple files using Control+Click or Cmd+Click.\n ")])]),e._v(" "),o("input",{attrs:{type:"hidden",value:"page",name:"type"}})])}];n._withStripped=!0,o.d(t,"a",function(){return n}),o.d(t,"b",function(){return a})},"./CTFd/themes/admin/assets/js/pages/challenge.js":function(e,t,o){o("./CTFd/themes/admin/assets/js/pages/main.js");var n=o("./CTFd/themes/core/assets/js/utils.js"),i=f(o("./node_modules/jquery/dist/jquery.js"));o("./node_modules/bootstrap/js/dist/tab.js");var l=f(o("./CTFd/themes/core/assets/js/CTFd.js")),a=o("./CTFd/themes/core/assets/js/ezq.js"),d=f(o("./CTFd/themes/core/assets/js/helpers.js")),s=o("./CTFd/themes/admin/assets/js/challenges/files.js"),r=o("./CTFd/themes/admin/assets/js/challenges/tags.js"),c=o("./CTFd/themes/admin/assets/js/challenges/requirements.js"),u=o("./CTFd/themes/admin/assets/js/styles.js"),m=o("./CTFd/themes/admin/assets/js/challenges/hints.js"),p=o("./CTFd/themes/admin/assets/js/challenges/flags.js");function f(e){return e&&e.__esModule?e:{default:e}}function h(e){l.default.api.get_hint({hintId:e,preview:!0}).then(function(e){e.data.content&&function(e){(0,a.ezAlert)({title:"Hint",body:j.render(e.content),button:"Got it!"})}(e.data)})}var j=l.default.lib.markdown();function g(e,t){var o=e.data,n=(0,i.default)("#result-message"),a=(0,i.default)("#result-notification"),s=(0,i.default)("#submission-input");a.removeClass(),n.text(o.message),"authentication_required"!==o.status?("incorrect"===o.status?(a.addClass("alert alert-danger alert-dismissable text-center"),a.slideDown(),s.removeClass("correct"),s.addClass("wrong"),setTimeout(function(){s.removeClass("wrong")},3e3)):"correct"===o.status?(a.addClass("alert alert-success alert-dismissable text-center"),a.slideDown(),(0,i.default)(".challenge-solves").text(parseInt((0,i.default)(".challenge-solves").text().split(" ")[0])+1+" Solves"),s.val(""),s.removeClass("wrong"),s.addClass("correct")):"already_solved"===o.status?(a.addClass("alert alert-info alert-dismissable text-center"),a.slideDown(),s.addClass("correct")):"paused"===o.status?(a.addClass("alert alert-warning alert-dismissable text-center"),a.slideDown()):"ratelimited"===o.status&&(a.addClass("alert alert-warning alert-dismissable text-center"),a.slideDown(),s.addClass("too-fast"),setTimeout(function(){s.removeClass("too-fast")},3e3)),setTimeout(function(){(0,i.default)(".alert").slideUp(),(0,i.default)("#challenge-submit").removeClass("disabled-button"),(0,i.default)("#challenge-submit").prop("disabled",!1)},3e3),t&&t(o)):window.location=l.default.config.urlRoot+"/login?next="+l.default.config.urlRoot+window.location.pathname+window.location.hash}function _(t){l.default._internal.challenge={},i.default.getScript(l.default.config.urlRoot+t.scripts.view,function(){var e=t.create;(0,i.default)("#create-chal-entry-div").html(e),(0,u.bindMarkdownEditors)(),i.default.getScript(l.default.config.urlRoot+t.scripts.create,function(){(0,i.default)("#create-chal-entry-div form").submit(function(e){e.preventDefault();var t=(0,i.default)("#create-chal-entry-div form").serializeJSON();l.default.fetch("/api/v1/challenges",{method:"POST",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(t)}).then(function(e){return e.json()}).then(function(e){e.success&&((0,i.default)("#challenge-create-options #challenge_id").val(e.data.id),(0,i.default)("#challenge-create-options").modal())})})})})}function v(a){a.preventDefault();var s=(0,i.default)(a.target).serializeJSON(!0),o={challenge_id:s.challenge_id,content:s.flag||"",type:s.flag_type,data:s.flag_data?s.flag_data:""};Promise.all([new Promise(function(t,e){0!=o.content.length?l.default.fetch("/api/v1/flags",{method:"POST",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(o)}).then(function(e){t(e.json())}):t()}),new Promise(function(e,t){var o=a.target,n={challenge:s.challenge_id,type:"challenge"};(0,i.default)(o.elements.file).val()&&d.default.files.upload(o,n),e()})]).then(function(e){l.default.fetch("/api/v1/challenges/"+s.challenge_id,{method:"PATCH",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({state:s.state})}).then(function(e){return e.json()}).then(function(e){e.success&&setTimeout(function(){window.location=l.default.config.urlRoot+"/admin/challenges/"+s.challenge_id},700)})})}(0,i.default)(function(){(0,i.default)(".preview-challenge").click(function(e){window.challenge=new Object,l.default._internal.challenge={},i.default.get(l.default.config.urlRoot+"/api/v1/challenges/"+window.CHALLENGE_ID,function(e){var t=l.default._internal.challenge,o=e.data;o.solves=null,i.default.getScript(l.default.config.urlRoot+o.type_data.scripts.view,function(){(0,i.default)("#challenge-window").empty(),(0,i.default)("#challenge-window").append(o.view),(0,i.default)("#challenge-window #challenge-input").addClass("form-control"),(0,i.default)("#challenge-window #challenge-submit").addClass("btn btn-md btn-outline-secondary float-right"),(0,i.default)(".challenge-solves").hide(),(0,i.default)(".nav-tabs a").click(function(e){e.preventDefault(),(0,i.default)(this).tab("show")}),(0,i.default)("#challenge-window").on("hide.bs.modal",function(e){(0,i.default)("#challenge-input").removeClass("wrong"),(0,i.default)("#challenge-input").removeClass("correct"),(0,i.default)("#incorrect-key").slideUp(),(0,i.default)("#correct-key").slideUp(),(0,i.default)("#already-solved").slideUp(),(0,i.default)("#too-fast").slideUp()}),(0,i.default)(".load-hint").on("click",function(e){h((0,i.default)(this).data("hint-id"))}),(0,i.default)("#challenge-submit").click(function(e){e.preventDefault(),(0,i.default)("#challenge-submit").addClass("disabled-button"),(0,i.default)("#challenge-submit").prop("disabled",!0),l.default._internal.challenge.submit(!0).then(g)}),(0,i.default)("#challenge-input").keyup(function(e){13==e.keyCode&&(0,i.default)("#challenge-submit").click()}),t.postRender(),window.location.replace(window.location.href.split("#")[0]+"#preview"),(0,i.default)("#challenge-window").modal()})})}),(0,i.default)(".delete-challenge").click(function(e){(0,a.ezQuery)({title:"Delete Challenge",body:"Are you sure you want to delete {0}".format(""+(0,n.htmlEntities)(window.CHALLENGE_NAME)+""),success:function(){l.default.fetch("/api/v1/challenges/"+window.CHALLENGE_ID,{method:"DELETE"}).then(function(e){return e.json()}).then(function(e){e.success&&(window.location=l.default.config.urlRoot+"/admin/challenges")})}})}),(0,i.default)("#challenge-update-container > form").submit(function(e){e.preventDefault();var o=(0,i.default)(e.target).serializeJSON(!0);l.default.fetch("/api/v1/challenges/"+window.CHALLENGE_ID+"/flags",{method:"GET",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"}}).then(function(e){return e.json()}).then(function(e){function t(){l.default.fetch("/api/v1/challenges/"+window.CHALLENGE_ID,{method:"PATCH",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(o)}).then(function(e){return e.json()}).then(function(e){if(e.success){switch((0,i.default)(".challenge-state").text(e.data.state),e.data.state){case"visible":(0,i.default)(".challenge-state").removeClass("badge-danger").addClass("badge-success");break;case"hidden":(0,i.default)(".challenge-state").removeClass("badge-success").addClass("badge-danger")}(0,a.ezToast)({title:"Success",body:"Your challenge has been updated!"})}})}0===e.data.length&&"visible"===o.state?(0,a.ezQuery)({title:"Missing Flags",body:"This challenge does not have any flags meaning it may be unsolveable. Are you sure you'd like to update this challenge?",success:t}):t()})}),(0,i.default)("#challenge-create-options form").submit(v),(0,i.default)("#tags-add-input").keyup(r.addTag),(0,i.default)(".delete-tag").click(r.deleteTag),(0,i.default)("#prerequisite-add-form").submit(c.addRequirement),(0,i.default)(".delete-requirement").click(c.deleteRequirement),(0,i.default)("#file-add-form").submit(s.addFile),(0,i.default)(".delete-file").click(s.deleteFile),(0,i.default)("#hint-add-button").click(m.showHintModal),(0,i.default)(".delete-hint").click(m.deleteHint),(0,i.default)(".edit-hint").click(m.showEditHintModal),(0,i.default)("#hint-edit-form").submit(m.editHint),(0,i.default)("#flag-add-button").click(p.addFlagModal),(0,i.default)(".delete-flag").click(p.deleteFlag),(0,i.default)("#flags-create-select").change(p.flagTypeSelect),(0,i.default)(".edit-flag").click(p.editFlagModal),i.default.get(l.default.config.urlRoot+"/api/v1/challenges/types",function(e){var t=e.data;_(t.standard),(0,i.default)("#create-chals-select input[name=type]").change(function(){_(t[this.value])})})})},"./CTFd/themes/admin/assets/js/pages/main.js":function(e,t,o){var n=m(o("./CTFd/themes/core/assets/js/CTFd.js")),a=m(o("./node_modules/jquery/dist/jquery.js")),s=m(o("./node_modules/moment/moment.js")),i=m(o("./node_modules/nunjucks/browser/nunjucks.js")),l=o("./node_modules/howler/dist/howler.js"),d=m(o("./CTFd/themes/core/assets/js/events.js")),r=m(o("./CTFd/themes/core/assets/js/times.js")),c=m(o("./CTFd/themes/admin/assets/js/styles.js")),u=m(o("./CTFd/themes/core/assets/js/helpers.js"));function m(e){return e&&e.__esModule?e:{default:e}}n.default.init(window.init),window.CTFd=n.default,window.helpers=u.default,window.$=a.default,window.Moment=s.default,window.nunjucks=i.default,window.Howl=l.Howl,(0,a.default)(function(){(0,c.default)(),(0,r.default)(),(0,d.default)(n.default.config.urlRoot)})},"./CTFd/themes/admin/assets/js/styles.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.showMediaLibrary=r,t.bindMarkdownEditors=c,t.default=void 0,o("./node_modules/bootstrap/dist/js/bootstrap.bundle.js");var n=o("./CTFd/themes/core/assets/js/utils.js"),a=d(o("./node_modules/jquery/dist/jquery.js")),s=d(o("./node_modules/easymde/src/js/easymde.js")),i=d(o("./node_modules/vue/dist/vue.esm.browser.js")),l=d(o("./CTFd/themes/admin/assets/js/components/files/MediaLibrary.vue"));function d(e){return e&&e.__esModule?e:{default:e}}function r(e){var t=i.default.extend(l.default),o=document.createElement("div");document.querySelector("main").appendChild(o);var n=new t({propsData:{editor:e}}).$mount(o);(0,a.default)("#media-modal").on("hidden.bs.modal",function(e){n.$destroy(),(0,a.default)("#media-modal").remove()}),(0,a.default)("#media-modal").modal()}function c(){(0,a.default)("textarea.markdown").each(function(e,t){if(!1===t.hasOwnProperty("mde")){var o=new s.default({autoDownloadFontAwesome:!1,toolbar:["bold","italic","heading","|","quote","unordered-list","ordered-list","|","link","image",{name:"media",action:function(e){r(e)},className:"fas fa-file-upload",title:"Media Library"},"|","preview","guide"],element:this,initialValue:(0,a.default)(this).val(),forceSync:!0,minHeight:"200px"});this.mde=o,this.codemirror=o.codemirror,(0,a.default)(this).on("change keyup paste",function(){o.codemirror.getDoc().setValue((0,a.default)(this).val()),o.codemirror.refresh()})}})}t.default=function(){(0,a.default)(":input").each(function(){(0,a.default)(this).data("initial",(0,a.default)(this).val())}),(0,a.default)(function(){(0,a.default)("tr[data-href], td[data-href]").click(function(){if(!getSelection().toString()){var e=(0,a.default)(this).attr("data-href");e&&(window.location=e)}return!1}),(0,a.default)("[data-checkbox]").click(function(e){(0,a.default)(e.target).is("input[type=checkbox]")?e.stopImmediatePropagation():((0,a.default)(this).find("input[type=checkbox]").click(),e.stopImmediatePropagation())}),(0,a.default)("[data-checkbox-all]").on("click change",function(e){var t=(0,a.default)(this).prop("checked"),o=(0,a.default)(this).index()+1;(0,a.default)(this).closest("table").find("tr td:nth-child(".concat(o,") input[type=checkbox]")).prop("checked",t),e.stopImmediatePropagation()}),(0,a.default)("tr[data-href] a, tr[data-href] button").click(function(e){(0,a.default)(this).attr("data-dismiss")||e.stopPropagation()}),(0,a.default)(".page-select").change(function(){var e=new URL(window.location);e.searchParams.set("page",this.value),window.location.href=e.toString()}),(0,a.default)('a[data-toggle="tab"]').on("shown.bs.tab",function(e){sessionStorage.setItem("activeTab",(0,a.default)(e.target).attr("href"))});var e=sessionStorage.getItem("activeTab");if(e){var t=(0,a.default)('.nav-tabs a[href="'.concat(e,'"], .nav-pills a[href="').concat(e,'"]'));t.length?t.tab("show"):sessionStorage.removeItem("activeTab")}c(),(0,n.makeSortableTables)(),(0,a.default)('[data-toggle="tooltip"]').tooltip()})}},"./CTFd/themes/core/assets/js/CTFd.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(o("./CTFd/themes/core/assets/js/fetch.js")),a=r(o("./CTFd/themes/core/assets/js/config.js")),s=o("./CTFd/themes/core/assets/js/api.js");o("./CTFd/themes/core/assets/js/patch.js");var i=r(o("./node_modules/markdown-it/index.js")),l=r(o("./node_modules/jquery/dist/jquery.js")),d=r(o("./CTFd/themes/core/assets/js/ezq.js"));function r(e){return e&&e.__esModule?e:{default:e}}function c(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}var u=new s.API("/"),m={},p={ezq:d.default},f={$:l.default,markdown:function(e){var t=function(t){for(var e=1;e".concat(e.body,"

")):o.find(".modal-body").append((0,l.default)(e.body));var n=(0,l.default)(c.format(e.button));return e.success&&(0,l.default)(n).click(function(){e.success()}),e.large&&o.find(".modal-dialog").addClass("modal-lg"),o.find(".modal-footer").append(n),(0,l.default)("main").append(o),o.modal("show"),(0,l.default)(o).on("hidden.bs.modal",function(){(0,l.default)(this).modal("dispose")}),o}function f(e){(0,l.default)("#ezq--notifications-toast-container").length||(0,l.default)("body").append((0,l.default)("
").attr({id:"ezq--notifications-toast-container"}).css({position:"fixed",bottom:"0",right:"0","min-width":"20%"}));var t=d.format(e.title,e.body),o=(0,l.default)(t);if(e.onclose&&(0,l.default)(o).find("button[data-dismiss=toast]").click(function(){e.onclose()}),e.onclick){var n=(0,l.default)(o).find(".toast-body");n.addClass("cursor-pointer"),n.click(function(){e.onclick()})}var a=!1!==e.autohide,s=!1!==e.animation,i=e.delay||1e4;return(0,l.default)("#ezq--notifications-toast-container").prepend(o),o.toast({autohide:a,delay:i,animation:s}),o.toast("show"),o}function h(e){var t=s.format(e.title),o=(0,l.default)(t);"string"==typeof e.body?o.find(".modal-body").append("

".concat(e.body,"

")):o.find(".modal-body").append((0,l.default)(e.body));var n=(0,l.default)(m),a=(0,l.default)(u);return o.find(".modal-footer").append(a),o.find(".modal-footer").append(n),(0,l.default)("main").append(o),(0,l.default)(o).on("hidden.bs.modal",function(){(0,l.default)(this).modal("dispose")}),(0,l.default)(n).click(function(){e.success()}),o.modal("show"),o}function j(e){if(e.target){var t=(0,l.default)(e.target);return t.find(".progress-bar").css("width",e.width+"%"),t}var o=i.format(e.width),n=s.format(e.title),a=(0,l.default)(n);return a.find(".modal-body").append((0,l.default)(o)),(0,l.default)("main").append(a),a.modal("show")}function g(e){var t={success:r,error:a}[e.type].format(e.body);return(0,l.default)(t)}var _={ezAlert:p,ezToast:f,ezQuery:h,ezProgressBar:j,ezBadge:g};t.default=_},"./CTFd/themes/core/assets/js/fetch.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,o("./node_modules/whatwg-fetch/fetch.js");var n,a=(n=o("./CTFd/themes/core/assets/js/config.js"))&&n.__esModule?n:{default:n};var s=window.fetch;t.default=function(e,t){return void 0===t&&(t={method:"GET",credentials:"same-origin",headers:{}}),e=a.default.urlRoot+e,void 0===t.headers&&(t.headers={}),t.credentials="same-origin",t.headers.Accept="application/json",t.headers["Content-Type"]="application/json",t.headers["CSRF-Token"]=a.default.csrfNonce,s(e,t)}},"./CTFd/themes/core/assets/js/patch.js":function(e,t,o){var n,l=(n=o("./node_modules/q/q.js"))&&n.__esModule?n:{default:n},a=o("./CTFd/themes/core/assets/js/api.js");function s(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function d(e,t){return function(t){for(var e=1;e>4*a&255).toString(16)).substr(-2)}return n},t.htmlEntities=function(e){return(0,i.default)("
").text(e).html()},t.cumulativeSum=function(e){for(var t=e.concat(),o=0;o'),(0,i.default)("th.sort-col").click(function(){var e=(0,i.default)(this).parents("table").eq(0),t=e.find("tr:gt(0)").toArray().sort(function(a){return function(e,t){var o=s(e,a),n=s(t,a);return i.default.isNumeric(o)&&i.default.isNumeric(n)?o-n:o.toString().localeCompare(n)}}((0,i.default)(this).index()));this.asc=!this.asc,this.asc||(t=t.reverse());for(var o=0;o