{"version":3,"file":"jsalert.min.js","mappings":"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","sources":["webpack://JSAlert/./node_modules/light-sanitize-html/src/index.js","webpack://JSAlert/webpack/bootstrap","webpack://JSAlert/webpack/runtime/define property getters","webpack://JSAlert/webpack/runtime/hasOwnProperty shorthand","webpack://JSAlert/./src/event-source.js","webpack://JSAlert/./src/queue.js","webpack://JSAlert/./src/index.js","webpack://JSAlert/./src/icons.js"],"sourcesContent":["\"use strict\";\n\nconst allowedTags = [\n \"div\", \"span\",\n \"b\", \"u\", \"i\", \"strong\", \"em\", \"strike\", \"code\",\n \"p\", \"blockquote\", \"nl\", \"caption\", \"pre\",\n \"a\",\n \"br\",\n \"hr\",\n \"img\",\n \"ul\", \"ol\", \"nav\", \"li\",\n \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"menu\",\n \"table\", \"td\", \"tr\", \"thead\", \"tbody\", \"tfoot\", \"th\"\n];\n\n// full list here:\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes\nconst allowedAttributes = [\n \"align\", \"alt\", \"bgcolor\", \"border\", \"class\", \"color\",\n \"colspan\", \"dir\", \"headers\", \"height\", \"hidden\", \"href\", \"size\",\n \"hreflang\", \"id\", \"lang\", \"rel\", \"reversed\", \"rowspan\", \"shape\",\n \"sizes\", \"spellcheck\", \"src\", \"srcset\", \"style\",\n \"summary\", \"title\", \"translate\", \"type\", \"width\",\n \"data\", \"data-*\"\n];\n\nfunction sanitize(html, options) {\n let coach = new Coach(html);\n return coach.sanitize(options);\n}\n\nclass Coach {\n constructor(str) {\n this.str = str;\n this.i = 0;\n }\n \n sanitize(options) {\n options = options || {};\n // custom allowed tags or global config\n let allowedTags = options.allowedTags || sanitize.allowedTags;\n if ( !allowedTags || !allowedTags.includes ) {\n allowedTags = false;\n }\n // custom allowed attributes or global config\n let allowedAttributes = options.allowedAttributes || sanitize.allowedAttributes;\n if ( !allowedAttributes || !allowedAttributes.includes ) {\n allowedAttributes = false;\n }\n \n // walk to tags\n while ( this.i < this.str.length ) {\n if ( !this.isTag() ) {\n this.i++;\n continue;\n }\n \n // here we find tag\n let start = this.i;\n let tagName = this.readTagName();\n \n // check banned tags\n let isWhiteTag;\n if ( allowedTags === false ) {\n isWhiteTag = true;\n } else {\n isWhiteTag = allowedTags.includes(tagName);\n }\n \n // remove bad tag\n if ( !isWhiteTag ) {\n this.cutTag(start);\n continue;\n }\n \n this.stripAttributes(tagName, allowedAttributes);\n \n this.skipSpace();\n let char = this.str[ this.i ];\n if ( char == \"/\" ) {\n this.i++;\n this.skipSpace();\n }\n \n // if tag is invalid, then just cut him\n // because clean html code cotain only valid tags\n if ( char != \">\" ) {\n this.cutTag(start);\n }\n }\n \n return this.str;\n }\n \n isTag() {\n let char = this.str[ this.i ];\n return char == \"<\";\n }\n \n readTagName() {\n let char = this.str[ this.i ];\n if ( char == \"<\" ) {\n this.i++;\n }\n this.skipSpace();\n \n char = this.str[ this.i ];\n if ( char == \"/\" ) {\n this.i++;\n this.skipSpace();\n }\n \n let tagName = \"\";\n while ( this.i < this.str.length ) {\n let char = this.str[ this.i ];\n \n if ( /\\s|>|\\//.test(char) ) {\n break;\n } else {\n tagName += char;\n this.i++;\n }\n }\n return tagName.toLowerCase();\n }\n \n cutTag(start) {\n while ( this.i < this.str.length ) {\n let char = this.str[ this.i ];\n if ( char == \">\" ) {\n break;\n }\n this.i++;\n }\n this.cutSubstring(start, this.i + 1);\n }\n \n stripAttributes(tagName, allowedAttributes) {\n this.skipSpace();\n \n if ( !this.isAttr() ) {\n return;\n }\n \n let start = this.i;\n let attrName = this.readAttrName();\n let attrValue = null;\n \n if ( this.isAttrValue() ) {\n attrValue = this.readAttrValue();\n }\n let end = this.i;\n \n // cut bad \n let isWhiteAttr = allowedAttributes.includes(attrName);\n let isValidAttr = isWhiteAttr;\n \n // \"
\"\n // if ( tagName == \"br\" ) {\n // isValidAttr = false;\n // }\n \n if ( attrName == \"src\" || attrName == \"href\" ) {\n if ( attrValue ) {\n let isValidURL = this.isValidURL( attrValue );\n if ( !isValidURL ) {\n isValidAttr = false;\n }\n } else {\n isValidAttr = false;\n }\n }\n \n if ( !isValidAttr ) {\n this.cutSubstring(start, end);\n }\n \n this.stripAttributes(tagName, allowedAttributes);\n }\n \n isValidURL(href) {\n // base on\n // https://github.com/punkave/sanitize-html/blob/master/src/index.js\n \n \n // Browsers ignore character codes of 32 (space) and below in a surprising\n // number of situations. Start reading here:\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#Embedded_tab\n \n /* eslint-disable */\n if ( /[\\x00-\\x20]/g.test(href) ) {\n return false;\n }\n /* eslint-enable */\n \n // Clobber any comments in URLs, which the browser might\n // interpret inside an XML data island, allowing\n // a javascript: URL to be snuck through\n if ( //.test(href) ) {\n return false;\n }\n \n //
\n href = href.trim();\n if ( !/^(#|http|\\/)/.test(href) ) {\n return false;\n }\n \n return true;\n }\n \n readAttrValue() {\n this.skipSpace();\n let char = this.str[ this.i ];\n if ( char == \"=\" ) {\n this.i++; // skip =\n this.skipSpace();\n }\n \n char = this.str[ this.i ];\n let quotes = false;\n if ( char == \"\\\"\" || char == \"'\" || char == \"`\" ) {\n quotes = char;\n this.i++;\n }\n \n let value = \"\";\n while ( this.i < this.str.length ) {\n let char = this.str[ this.i ];\n \n if ( quotes ) {\n if ( quotes == char ) {\n this.i++;\n break;\n } else {\n value += char;\n this.i++;\n }\n } else {\n if ( /[\\s>]/.test(char) ) {\n break;\n } else {\n value += char;\n this.i++;\n }\n }\n }\n \n return value;\n }\n \n isAttrValue() {\n let endPart = this.str.slice(this.i);\n return /^\\s*=\\s*/.test(endPart);\n }\n \n skipTagName() {\n // < word >\n let startPosition = /^<\\s*(\\w+)[^\\w]\\s*/i.exec( this.str );\n startPosition = startPosition && startPosition[0].length || 0;\n this.i = startPosition;\n }\n \n skipSpace() {\n while ( this.i < this.str.length ) {\n let char = this.str[ this.i ];\n \n if ( /\\s/.test(char) ) {\n this.i++;\n } else {\n break;\n }\n }\n }\n \n readAttrName() {\n let attrName = \"\";\n while ( this.i < this.str.length ) {\n let char = this.str[ this.i ];\n \n if ( /\\s|=|>/.test(char) ) {\n break;\n } else {\n attrName += char;\n this.i++;\n }\n }\n \n return attrName.toLowerCase();\n }\n \n isAttr() {\n let char = this.str[ this.i ];\n return (\n // if chat is null, then test return true\n // stop recursion\n char && \n /[^>\\s]/.test(char)\n );\n }\n \n cutSubstring(start, end) {\n this.str = (\n this.str.slice(0, start) +\n this.str.slice(end)\n );\n this.i -= end - start;\n }\n}\n\nsanitize.allowedTags = allowedTags;\nsanitize.allowedAttributes = allowedAttributes;\n\nmodule.exports = sanitize;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","//\r\n// EventSource class - This class provides simple event functionality for classes, with Promise support.\r\n//\r\n//\tUsage for once-off event listeners:\r\n//\r\n//\t\tmyObj.when(\"closed\").then(function(data) {\r\n//\t\t\talert(\"Closed! \" + data);\r\n//\t\t});\r\n//\r\n//\r\n//\tUsage for permanent event listeners:\r\n//\r\n//\t\tmyObj.on(\"closed\", function(data) {\r\n//\t\t\talert(\"Closed! \" + data);\r\n//\t\t});\r\n//\r\n//\r\n//\tUsage when triggering an event from a subclass:\r\n//\r\n//\t\tthis.emit(\"closed\", \"customData\");\r\n//\r\n\r\n\r\nexport default class EventSource {\r\n\t\r\n\t/** Adds an event listener. If callback is null, a Promise will be returned. Note that if using the Promise\r\n\t * it will only be triggered on the first event emitted. */\r\n\twhen(eventName, callback = null) {\r\n\t\t\r\n\t\t// Make sure event listener object exists\r\n\t\tthis._eventListeners = this._eventListeners || {};\r\n\t\t\r\n\t\t// Make sure event listener array exists\r\n\t\tthis._eventListeners[eventName] = this._eventListeners[eventName] || [];\r\n\t\t\r\n\t\t// Check if using promise form\r\n\t\tif (callback) {\r\n\t\t\t\r\n\t\t\t// Just add the callback\r\n\t\t\tthis._eventListeners[eventName].push(callback);\r\n\t\t\t\r\n\t\t} else {\r\n\t\t\r\n\t\t\t// Return the promise\r\n\t\t\treturn new Promise((onSuccess, onFail) => {\r\n\t\t\t\t\r\n\t\t\t\t// Promise callbacks can only be used once\r\n\t\t\t\tonSuccess._removeAfterCall = true;\r\n\t\t\t\t\r\n\t\t\t\t// Add success handler to event listener array\r\n\t\t\t\tthis._eventListeners[eventName].push(onSuccess);\r\n\t\t\t\t\r\n\t\t\t});\r\n\t\t\r\n\t\t}\r\n\t\t\r\n\t}\r\n\t\r\n\t/** Synonyms */\r\n\ton() {\r\n\t\treturn this.when.apply(this, arguments);\r\n\t}\r\n\t\r\n\taddEventListener() {\r\n\t\treturn this.when.apply(this, arguments);\r\n\t}\r\n\t\r\n\t\r\n\t\r\n\t\r\n\t/** Triggers an event. Each argument after the first one will be passed to event listeners */\r\n\temit(eventName, ...args) {\r\n\t\t\r\n\t\t// Get list of callbacks\r\n\t\tvar callbacks = this._eventListeners && this._eventListeners[eventName] || [];\r\n\t\t\r\n\t\t// Call events\r\n\t\tfor (var callback of callbacks) {\r\n\t\t\t\r\n\t\t\t// Call it\r\n\t\t\tcallback.apply(this, args);\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\t// Remove callbacks that can only be called once\r\n\t\tfor (var i = 0 ; i < callbacks.length ; i++)\r\n\t\t\tif (callbacks[i]._removeAfterCall)\r\n\t\t\t\tcallbacks.splice(i--, 1);\r\n\t\t\r\n\t}\r\n\t\r\n\t/** Synonyms */\r\n\ttrigger() {\r\n\t\treturn this.emit.apply(this, arguments);\r\n\t}\r\n\t\r\n\ttriggerEvent() {\r\n\t\treturn this.emit.apply(this, arguments);\r\n\t}\r\n\t\r\n}\r\n\r\n\r\n// Apply as a mixin to a class or object\r\nEventSource.mixin = function(otherClass) {\r\n\t\r\n\tfor (var prop in EventSource.prototype)\r\n\t\tif (EventSource.prototype.hasOwnProperty(prop))\r\n\t\t\totherClass[prop] = EventSource.prototype[prop];\r\n\t\r\n}","//\r\n// Queue class - A queue contains a list of items. Only one item can be active\r\n// at a time, and when one is removed the next one is activated\r\n//\r\n// To use this class, first add() your item. A promise will be returned that gets resolved\r\n// when your item is ready to be activated. Once your item is finished doing what it needs\r\n// to do, remove() it. This will trigger the next item's promise.\r\n//\r\n//\tExample:\r\n//\r\n//\t\tvar queue = new Queue();\r\n//\t\t\r\n//\t\tvar msgbox = new Popup();\r\n//\t\tqueue.add(msgbox).then(() => {\r\n//\t\t\tmsgbox.show();\r\n//\t\t\tmsgbox.when('closed').then(() => queue.remove(msgbox));\r\n//\t\t}\r\n//\t\t\r\n//\t\tvar msgbox2 = new Popup();\r\n//\t\tqueue.add(msgbox2).then(() => {\r\n//\t\t\tmsgbox2.show();\r\n//\t\t\tmsgbox2.when('closed').then(() => queue.remove(msgbox2));\r\n//\t\t}\r\n//\t\r\n//\r\n//\tIn the above example, only one message box would be visible at a time.\r\n//\r\n\r\nimport EventSource from './event-source.js'\r\n\r\n\r\nexport default class Queue extends EventSource {\r\n\t\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\t\r\n\t\t// Setup vars\r\n\t\tthis.items \t\t\t\t= [];\r\n\t\tthis.current\t\t\t= null;\r\n\t\t\r\n\t}\r\n\t\r\n\t\r\n\t/** Adds a queue item, and returns a Promise. */\r\n\tadd(item) {\r\n\t\t\r\n\t\t// Return a promise\r\n\t\treturn new Promise((onSuccess, onFail) => {\r\n\t\t\t\r\n\t\t\t// Store item and handler at the end of the queue. When this item is ready to be activated, the handler will be called to resolve the promise.\r\n\t\t\tthis.items.push({\r\n\t\t\t\titem: item,\r\n\t\t\t\tactivateHandler: onSuccess\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\t// Emit event\r\n\t\t\tthis.emit(\"added\", item);\r\n\t\t\t\r\n\t\t\t// Check if we can activate this one now\r\n\t\t\tsetTimeout(this.checkActivated.bind(this), 1);\r\n\t\t\r\n\t\t});\r\n\t\t\r\n\t}\r\n\t\r\n\t\r\n\t/** @private Checks if there a new item to be activated */\r\n\tcheckActivated() {\r\n\t\t\r\n\t\t// Check if there's already an activated item\r\n\t\tif (this.current)\r\n\t\t\treturn;\r\n\t\t\r\n\t\t// Check if we have any items\r\n\t\tif (this.items.length == 0) {\r\n\t\t\t\r\n\t\t\t// No more items\r\n\t\t\tthis.emit(\"empty\");\r\n\t\t\treturn;\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\t// We can activate the next item now\r\n\t\tthis.current = this.items[0];\r\n\t\t\r\n\t\t// Create promise resolve response. DO NOT directly pass a thenable, it won't work!\r\n\t\tvar resp = {\r\n\t\t\titem: this.current.item\r\n\t\t}\r\n\t\t\r\n\t\t// Resolve promise\r\n\t\tthis.current.activateHandler && this.current.activateHandler(resp);\r\n\t\t\r\n\t\t// Trigger event\r\n\t\tthis.emit(\"activated\", resp);\r\n\t\t\r\n\t}\r\n\t\r\n\t/** Removes a queued item. If the item is the currently activated one, the next item in the queue will be activated. */\r\n\tremove(item) {\r\n\t\t\r\n\t\t// Remove item from queue\r\n\t\tfor (var i = 0 ; i < this.items.length ; i++)\r\n\t\t\tif (this.items[i].item == item)\r\n\t\t\t\tthis.items.splice(i--, 1);\r\n\t\t\t\r\n\t\t// Emit event\r\n\t\tthis.emit(\"removed\", item);\r\n\t\t\t\r\n\t\t// Check if this was the current item\r\n\t\tif (this.current && this.current.item == item)\r\n\t\t\tthis.current = null;\r\n\t\t\r\n\t\t// Possibly activate the next item\r\n\t\tsetTimeout(this.checkActivated.bind(this), 1);\r\n\t\t\r\n\t}\r\n\t\r\n}","//\r\n// Main class for the JSAlert package\r\n\r\nimport Queue from './queue.js'\r\nimport EventSource from './event-source.js'\r\nimport PkgInfo from '../package.json'\r\nimport sanitize from 'light-sanitize-html'\r\n\r\nexport default class JSAlert extends EventSource {\r\n\r\n\t/** Library version */\r\n\tstatic get version() {\r\n\t\treturn PkgInfo.version\r\n\t}\r\n\t\r\n\t/** @static Creates and shows a new alert with the specified text */\r\n\tstatic alert(text, title, icon, closeText = \"Close\") {\r\n\t\t\r\n\t\t// Check if not in a browser\r\n\t\tif (typeof window === \"undefined\")\r\n\t\t\treturn Promise.resolve(console.log(\"Alert: \" + text));\r\n\t\t\r\n\t\t// Create alert\r\n\t\tvar alert = new JSAlert(text, title);\r\n\t\talert.addButton(closeText, null);\r\n\t\t\r\n\t\t// Set icon\r\n\t\tif (icon !== false)\r\n\t\t\talert.setIcon(icon || JSAlert.Icons.Information);\r\n\t\t\r\n\t\t// Show it\r\n\t\treturn alert.show();\r\n\t\t\r\n\t}\r\n\t\r\n\t/** @static Creates and shows a new confirm alert with the specified text */\r\n\tstatic confirm(text, title, icon, acceptText = \"OK\", rejectText = \"Cancel\") {\r\n\t\t\r\n\t\t// Check if not in a browser\r\n\t\tif (typeof window === \"undefined\")\r\n\t\t\treturn Promise.resolve(console.log(\"Alert: \" + text));\r\n\t\t\r\n\t\t// Create alert\r\n\t\tvar alert = new JSAlert(text, title);\r\n\t\talert.addButton(acceptText, true);\r\n\t\talert.addButton(rejectText, false);\r\n\t\t\r\n\t\t// Set icon\r\n\t\tif (icon !== false)\r\n\t\t\talert.setIcon(icon || JSAlert.Icons.Question);\r\n\t\t\r\n\t\t// Show it\r\n\t\treturn alert.show();\r\n\t\t\r\n\t}\r\n\t\r\n\t/** @static Creates and shows a new prompt, an alert with a single text field. */\r\n\tstatic prompt(text, defaultText, placeholderText, title, icon, acceptText = \"OK\", rejectText = \"Cancel\") {\r\n\t\t\r\n\t\t// Check if not in a browser\r\n\t\tif (typeof window === \"undefined\")\r\n\t\t\treturn Promise.resolve(console.log(\"Alert: \" + text));\r\n\t\t\r\n\t\t// Create alert\r\n\t\tvar alert = new JSAlert(text, title);\r\n\t\talert.addButton(acceptText, true, \"default\");\r\n\t\talert.addButton(rejectText, false, \"cancel\");\r\n\t\t\r\n\t\t// Set icon\r\n\t\tif (icon !== false)\r\n\t\t\talert.setIcon(icon || JSAlert.Icons.Question);\r\n\t\t\r\n\t\t// Add text field\r\n\t\talert.addTextField(defaultText, null, placeholderText);\r\n\t\t\r\n\t\t// Show it\r\n\t\treturn alert.show().then((result) => {\r\n\t\t\t\r\n\t\t\t// Check if cancelled\r\n\t\t\tif (alert.cancelled)\r\n\t\t\t\treturn null;\r\n\t\t\telse\r\n\t\t\t\treturn alert.getTextFieldValue(0);\r\n\t\t\t\r\n\t\t});\r\n\t\t\r\n\t}\r\n\t\r\n\t/** @static Creates and shows a loader, which is just an alert with no buttons. */\r\n\tstatic loader(text, cancelable) {\r\n\t\t\r\n\t\t// Check if not in a browser\r\n\t\tif (typeof window === \"undefined\")\r\n\t\t\treturn Promise.resolve(console.log(\"Loading: \" + text));\r\n\t\t\r\n\t\t// Create alert\r\n\t\tvar alert = new JSAlert(text);\r\n\t\talert.cancelable = cancelable;\r\n\t\t\r\n\t\t// Show it\r\n\t\treturn alert.show();\r\n\t\t\r\n\t}\r\n\t\r\n\t/** Constructor */\r\n\tconstructor(text = \"\", title = \"\") {\r\n\t\tsuper();\r\n\t\t\r\n\t\t// Setup vars\r\n\t\tthis.elems \t\t= {};\r\n\t\tthis.title\t\t= title;\r\n\t\tthis.text\t\t= text;\r\n\t\tthis.buttons\t= [];\r\n\t\tthis.textFields\t= [];\r\n\t\tthis.result\t\t= false;\r\n\t\tthis.iconURL\t= null;\r\n\t\tthis.cancelable = true;\r\n\t\tthis.cancelled\t= false;\r\n\t\tthis.dismissed\t= false;\r\n\t\t\r\n\t}\r\n\t\r\n\t\r\n\t/** Sets an icon for the alert. `icon` is either a URL or one of `JSAlert.Icons`. */\r\n\tsetIcon(icon) {\r\n\t\tthis.iconURL = icon;\r\n\t}\r\n\t\r\n\t\r\n\t/** Adds a button. Returns a Promise that is called if the button is clicked. */\r\n\taddButton(text, value, type) {\r\n\t\t\r\n\t\t// Return promise\r\n\t\treturn new Promise((onSuccess, onFail) => {\r\n\t\t\t\r\n\t\t\t// Add button\r\n\t\t\tthis.buttons.push({\r\n\t\t\t\ttext: text,\r\n\t\t\t\tvalue: typeof value == \"undefined\" ? text : value,\r\n\t\t\t\ttype: type || (this.buttons.length == 0 ? \"default\" : \"normal\"),\r\n\t\t\t\tcallback: onSuccess\r\n\t\t\t});\r\n\t\t\t\r\n\t\t});\r\n\t\t\r\n\t}\r\n\t\r\n\t\r\n\t/** Adds a text field. Returns a Promise that will be called when the dialog is dismissed, but not cancelled. */\r\n\taddTextField(value, type, placeholderText) {\r\n\t\t\r\n\t\t// Add text field\r\n\t\tthis.textFields.push({\r\n\t\t\tvalue: value || \"\",\r\n\t\t\ttype: type || \"text\",\r\n\t\t\tplaceholder: placeholderText || \"\"\r\n\t\t});\r\n\t\t\r\n\t}\r\n\t\r\n\t\r\n\t/** Gets a text field's value */\r\n\tgetTextFieldValue(index) {\r\n\t\t\r\n\t\t// Get text field info\r\n\t\tvar info = this.textFields[index];\r\n\t\t\r\n\t\t// Return the value\r\n\t\treturn (info.elem ? info.elem.value : info.value);\r\n\t\t\r\n\t}\r\n\t\r\n\t\r\n\t/** Shows the alert. */\r\n\tshow() {\r\n\t\t\r\n\t\t// Add to the queue\r\n\t\tJSAlert.popupQueue.add(this).then(() => {\r\n\t\t\t\r\n\t\t\t// Show us\r\n\t\t\tthis._show();\r\n\t\t\t\r\n\t\t\t// Notify that we have been shown\r\n\t\t\tthis.emit(\"opened\");\r\n\t\t\t\r\n\t\t});\r\n\t\t\r\n\t\t// Return the alert\r\n\t\treturn this;\r\n\t\t\r\n\t}\r\n\t\r\n\t\r\n\t/** A then function, to allow chaining with Promises */\r\n\tthen(func) {\r\n\t\treturn this.when(\"closed\").then(func);\r\n\t}\r\n\t\r\n\t\r\n\t/** Dismisses the alert. */\r\n\tdismiss(result) {\r\n\t\t\r\n\t\t// Do nothing if dismissed already\r\n\t\tif (this.dismissed) return;\r\n\t\tthis.dismissed = true;\r\n\t\t\r\n\t\t// Remove us from the queue\r\n\t\tJSAlert.popupQueue.remove(this);\r\n\t\t\r\n\t\t// Store result\r\n\t\tthis.result = result;\r\n\t\tif (typeof result == \"undefined\")\r\n\t\t\tthis.cancelled = true;\r\n\t\t\r\n\t\t// Remove elements\r\n\t\tthis.removeElements();\r\n\t\t\r\n\t\t// Remove global keyboard listener\r\n\t\twindow.removeEventListener(\"keydown\", this);\r\n\t\t\r\n\t\t// Trigger cancel-specific event\r\n\t\tif (this.cancelled)\r\n\t\t\tthis.emit(\"cancelled\", this.result);\r\n\t\telse\r\n\t\t\tthis.emit(\"complete\", this.result);\r\n\t\t\r\n\t\t// Trigger closed event\r\n\t\tthis.emit(\"closed\", this.result);\r\n\t\treturn this;\r\n\t\t\r\n\t}\r\n\t\r\n\t\r\n\t/** Dismisses the alert some time in the future */\r\n\tdismissIn(time) {\r\n\t\t\r\n\t\tsetTimeout(this.dismiss.bind(this), time);\r\n\t\treturn this;\r\n\t\r\n\t}\r\n\t\r\n\t\r\n\t/** @private Called to actually show the alert. */\r\n\t_show() {\r\n\t\t\r\n\t\t// Create elements\r\n\t\tthis.createBackground();\r\n\t\tthis.createPopup();\r\n\t\t\r\n\t\t// Add global keyboard listener\r\n\t\twindow.addEventListener(\"keydown\", this);\r\n\t\t\r\n\t}\r\n\t\r\n\t\r\n\t/** @private Called to create the overlay element. Theme subclasses can override this. */\r\n\tcreateBackground() {\r\n\t\t\r\n\t\t// Create element\r\n\t\tthis.elems.background = document.createElement(\"div\");\r\n\t\tthis.elems.background.style.cssText = \"position: fixed; top: 0px; left: 0px; width: 100%; height: 100%; z-index: 10000; background-color: rgba(0, 0, 0, 0.1); opacity: 0; transition: opacity 0.15s; \";\r\n\t\t\r\n\t\t// Add to document\r\n\t\tdocument.body.appendChild(this.elems.background);\r\n\t\t\r\n\t\t// Do animation\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.elems.background.offsetWidth;\r\n\t\t\tthis.elems.background.style.opacity = 1;\r\n\t\t}, 0);\r\n\t\t\r\n\t}\r\n\t\r\n\t\r\n\t/** @private Called to create the popup element. Theme subclasses can override this. */\r\n\tcreatePopup() {\r\n\t\t\r\n\t\t// Create container element\r\n\t\tthis.elems.container = document.createElement(\"div\");\r\n\t\tthis.elems.container.focusable = true;\r\n\t\tthis.elems.container.style.cssText = \"position: fixed; top: 0px; left: 0px; width: 100%; height: 100%; z-index: 10001; display: flex; justify-content: center; align-items: center; opacity: 0; transform: translateY(-40px); transition: opacity 0.15s, transform 0.15s; \";\r\n\t\tdocument.body.appendChild(this.elems.container);\r\n\t\t\r\n\t\t// Do animation\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.elems.container.offsetWidth;\r\n\t\t\tthis.elems.container.style.opacity = 1;\r\n\t\t\tthis.elems.container.style.transform = \"translateY(0px)\";\r\n\t\t}, 0);\r\n\t\t\r\n\t\t// Add dismiss handler\r\n\t\tthis.addTouchHandler(this.elems.container, () => {\r\n\t\t\t\r\n\t\t\t// Check if cancelable\r\n\t\t\tif (!this.cancelable)\r\n\t\t\t\treturn;\r\n\t\t\t\r\n\t\t\t// Dismiss\r\n\t\t\tthis.cancelled = true;\r\n\t\t\tthis.dismiss();\r\n\t\t\t\r\n\t\t});\r\n\t\t\r\n\t\t// Create window\r\n\t\tthis.elems.window = document.createElement(\"div\");\r\n\t\tthis.elems.window.style.cssText = \"position: relative; background-color: rgba(255, 255, 255, 0.95); box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.25); border-radius: 5px; padding: 10px; min-width: 50px; min-height: 10px; max-width: 50%; max-height: 90%; backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); \";\r\n\t\tthis.elems.container.appendChild(this.elems.window);\r\n\t\t\r\n\t\t// Create icon if there is one\r\n\t\tif (this.iconURL) {\r\n\t\t\t\r\n\t\t\tthis.elems.icon = document.createElement(\"img\");\r\n\t\t\tthis.elems.icon.style.cssText = \"display: block; margin: auto; max-height: 40px; text-align: center; font-family: Helvetica, Arial; font-size: 17px; font-weight: bold; color: #000; cursor: default; padding: 10px 0px; \";\r\n\t\t\tthis.elems.icon.src = this.iconURL;\r\n\t\t\tthis.elems.window.appendChild(this.elems.icon);\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\t// Create title if there is one\r\n\t\tif (this.title) {\r\n\t\t\t\r\n\t\t\tthis.elems.title = document.createElement(\"div\");\r\n\t\t\tthis.elems.title.style.cssText = \"display: block; text-align: center; font-family: Helvetica, Arial; font-size: 17px; font-weight: bold; color: #000; cursor: default; padding: 2px 20px; \";\r\n\t\t\tthis.elems.title.innerHTML = sanitize(this.title)\r\n\t\t\tthis.elems.window.appendChild(this.elems.title);\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\t// Create text if there is one\r\n\t\tif (this.text) {\r\n\t\t\t\r\n\t\t\tthis.elems.text = document.createElement(\"div\");\r\n\t\t\tthis.elems.text.style.cssText = \"display: block; text-align: center; font-family: Helvetica, Arial; font-size: 15px; font-weight: normal; color: #000; cursor: default; padding: 2px 20px; \";\r\n\t\t\tthis.elems.text.innerHTML = sanitize(this.text)\r\n\t\t\tthis.elems.window.appendChild(this.elems.text);\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\t// Create text fields if there are any\r\n\t\tif (this.textFields.length > 0) {\r\n\t\t\t\r\n\t\t\tthis.elems.textFields = document.createElement(\"div\");\r\n\t\t\tthis.elems.textFields.style.cssText = \"display: block; \";\r\n\t\t\tthis.elems.window.appendChild(this.elems.textFields);\r\n\t\t\t\r\n\t\t\t// Add each text field\r\n\t\t\tthis.textFields.forEach((b, idx) => {\r\n\t\t\t\t\r\n\t\t\t\tb.elem = document.createElement(\"input\");\r\n\t\t\t\tb.elem.style.cssText = \"display: block; width: 90%; min-width: 250px; padding: 5px 0px; margin: 10px auto; background-color: #FFF; border: 1px solid #EEE; border-radius: 5px; text-align: center; font-family: Helvetica, Arial; font-size: 15px; color: #222; \";\r\n\t\t\t\tb.elem.value = b.value;\r\n\t\t\t\tb.elem.placeholder = b.placeholder;\r\n\t\t\t\tb.elem.type = b.type;\r\n\t\t\t\tthis.elems.textFields.appendChild(b.elem);\r\n\t\t\t\t\r\n\t\t\t\t// Add keyboard listener\r\n\t\t\t\tb.elem.addEventListener(\"keypress\", (e) => {\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Ignore if not enter\r\n\t\t\t\t\tif (e.keyCode != 13)\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Check if this is the last input field\r\n\t\t\t\t\tif (idx+1 >= this.textFields.length) {\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// Done\r\n\t\t\t\t\t\tthis.dismiss(\"enter-pressed\");\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// Just select the next field\r\n\t\t\t\t\t\tthis.textFields[idx+1].elem.focus();\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\t// Focus on first field\r\n\t\t\tthis.textFields[0].elem.focus();\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\t// Create buttons if there are any\r\n\t\tif (this.buttons.length > 0) {\r\n\t\t\t\r\n\t\t\tthis.elems.buttons = document.createElement(\"div\");\r\n\t\t\tthis.elems.buttons.style.cssText = \"display: block; display: flex; justify-content: space-around; align-items: center; text-align: right; border-top: 1px solid #EEE; margin-top: 10px; \";\r\n\t\t\tthis.elems.window.appendChild(this.elems.buttons);\r\n\t\t\t\r\n\t\t\t// Add each button\r\n\t\t\tthis.buttons.forEach((b) => {\r\n\t\t\t\t\r\n\t\t\t\tvar btn = document.createElement(\"div\");\r\n\t\t\t\tbtn.style.cssText = \"display: inline-block; font-family: Helvetica, Arial; font-size: 15px; font-weight: 200; color: #08F; padding: 10px 20px; padding-bottom: 0px; cursor: pointer; \";\r\n\t\t\t\tbtn.innerText = b.text;\r\n\t\t\t\tthis.elems.buttons.appendChild(btn);\r\n\t\t\t\t\r\n\t\t\t\t// Add button handler\r\n\t\t\t\tthis.addTouchHandler(btn, () => {\r\n\t\t\t\t\tb.callback && b.callback(b.value);\r\n\t\t\t\t\tif (b.type == \"cancel\") this.cancelled = true;\r\n\t\t\t\t\tthis.dismiss(b.value);\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t});\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t}\r\n\t\r\n\t\r\n\t/** @private Called to remove all elements from the screen */\r\n\tremoveElements() {\r\n\t\t\r\n\t\t// Don't do anything if not loaded\r\n\t\tif (!this.elems || !this.elems.container)\r\n\t\t\treturn;\r\n\t\t\r\n\t\t// Animate background away\r\n\t\tthis.elems.background.style.opacity = 0;\r\n\t\tthis.elems.container.style.opacity = 0;\r\n\t\tthis.elems.container.style.transform = \"translateY(40px)\";\r\n\t\t\r\n\t\t// Remove elements after animation\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.removeElement(this.elems.background);\r\n\t\t\tthis.removeElement(this.elems.container);\r\n\t\t}, 250);\r\n\t\t\r\n\t}\r\n\t\r\n\t/** @private Helper function to remove an element */\r\n\tremoveElement(elem) {\r\n\t\telem && elem.parentNode && elem.parentNode.removeChild(elem);\r\n\t}\r\n\t\r\n\t/** @private Helper function to add a click or touch event handler that doesn't bubble */\r\n\taddTouchHandler(elem, callback) {\r\n\t\t\r\n\t\t// Create handler\r\n\t\tvar handler = (e) => {\r\n\t\t\t\r\n\t\t\t// Stop default browser action, unless this is an input field\r\n\t\t\tif (e.target.nodeName.toLowerCase() != \"input\")\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\r\n\t\t\t// Check if our element was pressed, not a child element\r\n\t\t\tif (e.target != elem)\r\n\t\t\t\treturn;\r\n\t\t\t\r\n\t\t\t// Trigger callback\r\n\t\t\tcallback();\r\n\t\t}\r\n\t\t\r\n\t\t// Add listeners\r\n\t\tthis.elems.container.addEventListener(\"mousedown\", handler, true);\r\n\t\tthis.elems.container.addEventListener(\"touchstart\", handler, true);\r\n\t\t\r\n\t}\r\n\t\r\n\t/** @private Called by the browser when a keyboard event is fired on the whole window */\r\n\thandleEvent(e) {\r\n\t\t\r\n\t\t// Check if enter was pressed\r\n\t\tif (e.keyCode == 13) {\r\n\t\t\t\r\n\t\t\t// Find the first default button and use that value instead\r\n\t\t\tfor (var i = 0 ; i < this.buttons.length ; i++) {\r\n\t\t\t\tif (this.buttons[i].type == \"default\") {\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Use this button's value\r\n\t\t\t\t\tthis.dismiss(this.buttons[i].value);\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Trigger the button's callback\r\n\t\t\t\t\tthis.buttons[i].callback && this.buttons[i].callback(this.result);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// No default button found, cancel\r\n\t\t\tthis.cancelled = true;\r\n\t\t\tthis.dismiss();\r\n\t\t\treturn;\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\t// Check if escape was pressed\r\n\t\tif (e.keyCode == 27) {\r\n\t\t\t\r\n\t\t\t// Check if cancelable\r\n\t\t\tif (!this.cancelable)\r\n\t\t\t\treturn;\r\n\t\t\t\r\n\t\t\t// Find the first default button and use that value instead\r\n\t\t\tthis.cancelled = true;\r\n\t\t\tthis.result = null;\r\n\t\t\tfor (var i = 0 ; i < this.buttons.length ; i++) {\r\n\t\t\t\tif (this.buttons[i].type == \"cancel\") {\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Use this button's value\r\n\t\t\t\t\tthis.dismiss(this.buttons[i].value);\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Trigger the button's callback\r\n\t\t\t\t\tthis.buttons[i].callback && this.buttons[i].callback(this.result);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// No cancel button found, just cancel\r\n\t\t\tthis.cancelled = true;\r\n\t\t\tthis.dismiss();\r\n\t\t\treturn;\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t}\r\n\t\r\n}\r\n\r\n\r\n\r\n// Include theme's icons\r\nimport icons from \"./icons.js\";\r\nJSAlert.Icons = icons;\r\n\r\n\r\n\t\r\n// The default popup queue\r\nJSAlert.popupQueue = new Queue();\r\n\r\n\r\n// In case anyone wants to use the classes of this project on their own...\r\nJSAlert.Queue = Queue;\r\nJSAlert.EventSource = EventSource;","//\r\n// Theme icons\r\n\r\nexport default {\r\n\t\r\n\tInformation: \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjgwcHgiIGhlaWdodD0iODBweCIgdmlld0JveD0iMCAwIDgwIDgwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzLjguMyAoMjk4MDIpIC0gaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoIC0tPgogICAgPHRpdGxlPkluZm9ybWF0aW9uIEljb248L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iSW5mb3JtYXRpb24tSWNvbiIgZmlsbD0iIzAwODVGRiI+CiAgICAgICAgICAgIDxnIGlkPSI3MjQtaW5mb0AyeCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNi4wMDAwMDAsIDYuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICA8ZyBpZD0iTGF5ZXJfMSI+CiAgICAgICAgICAgICAgICAgICAgPGcgaWQ9Il94MzdfMjQtaW5mb194NDBfMngucG5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTMzLjczNDA3MTQsMjUuNzA3NjQyOSBDMzQuNzE4ODU3MSwyNS43MDc2NDI5IDM1LjU3MTI4NTcsMjUuMzQzMzU3MSAzNi4yOTAxNDI5LDI0LjYxNzIxNDMgQzM3LjAwOSwyMy44OTEwNzE0IDM3LjM3MDg1NzEsMjMuMDA5NSAzNy4zNzA4NTcxLDIxLjk3NjE0MjkgQzM3LjM3MDg1NzEsMjAuOTQyNzg1NyAzNy4wMTM4NTcxLDIwLjA2IDM2LjI5OTg1NzEsMTkuMzI1MzU3MSBDMzUuNTg1ODU3MSwxOC41OTA3MTQzIDM0LjczMSwxOC4yMjUyMTQzIDMzLjczNDA3MTQsMTguMjI1MjE0MyBDMzIuNzM3MTQyOSwxOC4yMjUyMTQzIDMxLjg3ODY0MjksMTguNTkxOTI4NiAzMS4xNTg1NzE0LDE5LjMyNTM1NzEgQzMwLjQzODUsMjAuMDU4Nzg1NyAzMC4wNzkwNzE0LDIwLjk0Mjc4NTcgMzAuMDc5MDcxNCwyMS45NzYxNDI5IEMzMC4wNzkwNzE0LDIzLjAwOTUgMzAuNDM4NSwyMy44ODk4NTcxIDMxLjE1ODU3MTQsMjQuNjE3MjE0MyBDMzEuODc4NjQyOSwyNS4zNDQ1NzE0IDMyLjczNzE0MjksMjUuNzA3NjQyOSAzMy43MzQwNzE0LDI1LjcwNzY0MjkgTDMzLjczNDA3MTQsMjUuNzA3NjQyOSBaIE0zNCwwIEMxNS4yMjIyODU3LDAgMCwxNS4yMjIyODU3IDAsMzQgQzAsNTIuNzc3NzE0MyAxNS4yMjIyODU3LDY4IDM0LDY4IEM1Mi43Nzc3MTQzLDY4IDY4LDUyLjc3NzcxNDMgNjgsMzQgQzY4LDE1LjIyMjI4NTcgNTIuNzc3NzE0MywwIDM0LDAgTDM0LDAgWiBNMzQsNjUuNTcxNDI4NiBDMTYuNTY0MDcxNCw2NS41NzE0Mjg2IDIuNDI4NTcxNDMsNTEuNDM1OTI4NiAyLjQyODU3MTQzLDM0IEMyLjQyODU3MTQzLDE2LjU2NDA3MTQgMTYuNTY0MDcxNCwyLjQyODU3MTQzIDM0LDIuNDI4NTcxNDMgQzUxLjQzNTkyODYsMi40Mjg1NzE0MyA2NS41NzE0Mjg2LDE2LjU2NDA3MTQgNjUuNTcxNDI4NiwzNCBDNjUuNTcxNDI4Niw1MS40MzU5Mjg2IDUxLjQzNTkyODYsNjUuNTcxNDI4NiAzNCw2NS41NzE0Mjg2IEwzNCw2NS41NzE0Mjg2IFogTTM4LjMzMDE0MjksNDcuNzY3NTcxNCBDMzcuOTg2NSw0Ny42MDM2NDI5IDM3LjcyMDU3MTQsNDcuMzU1OTI4NiAzNy41MzcyMTQzLDQ3LjAyMzIxNDMgQzM3LjM1MjY0MjksNDYuNjkxNzE0MyAzNy4yNTkxNDI5LDQ2LjI4NzM1NzEgMzcuMjU5MTQyOSw0NS44MTAxNDI5IEwzNy4yNTkxNDI5LDI5LjYyMjUgTDM2Ljk4MjI4NTcsMjkuMzE2NSBMMjcuOTM3MDcxNCwyOS44NDcxNDI5IEwyNy45MzcwNzE0LDMxLjMzNTg1NzEgQzI4LjMwNjIxNDMsMzEuMzc1OTI4NiAyOC43MTU0Mjg2LDMxLjQ3MTg1NzEgMjkuMTY0NzE0MywzMS42MjEyMTQzIEMyOS42MTQsMzEuNzcwNTcxNCAyOS45NDkxNDI5LDMxLjkyNzIxNDMgMzAuMTcwMTQyOSwzMi4wODk5Mjg2IEMzMC40NjUyMTQzLDMyLjMwODUgMzAuNzExNzE0MywzMi41OTYyODU3IDMwLjkwODQyODYsMzIuOTU2OTI4NiBDMzEuMTA1MTQyOSwzMy4zMTc1NzE0IDMxLjIwMzUsMzMuNzM1Mjg1NyAzMS4yMDM1LDM0LjIxMDA3MTQgTDMxLjIwMzUsNDYuMDc2MDcxNCBDMzEuMjAzNSw0Ni41Nzg3ODU3IDMxLjEyNDU3MTQsNDYuOTgzMTQyOSAzMC45NjQyODU3LDQ3LjI4OTE0MjkgQzMwLjgwNCw0Ny41OTUxNDI5IDMwLjUyNzE0MjksNDcuODI5NSAzMC4xMzI1LDQ3Ljk5MjIxNDMgQzI5LjkxMDI4NTcsNDguMDg4MTQyOSAyOS42NDY3ODU3LDQ4LjE1NjE0MjkgMjkuMzM5NTcxNCw0OC4xOTYyMTQzIEMyOS4wMzExNDI5LDQ4LjIzNjI4NTcgMjguNzE3ODU3MSw0OC4yNzE1IDI4LjM5ODUsNDguMjk4MjE0MyBMMjguMzk4NSw0OS43ODU3MTQzIEw0MC4wNjUzNTcxLDQ5Ljc4NTcxNDMgTDQwLjA2NTM1NzEsNDguMjk3IEMzOS43NDQ3ODU3LDQ4LjI1NjkyODYgMzkuNDM2MzU3MSw0OC4xODg5Mjg2IDM5LjE0MTI4NTcsNDguMDkzIEMzOC44NDc0Mjg2LDQ3Ljk5ODI4NTcgMzguNTc3ODU3MSw0Ny44ODkgMzguMzMwMTQyOSw0Ny43Njc1NzE0IEwzOC4zMzAxNDI5LDQ3Ljc2NzU3MTQgWiIgaWQ9IlNoYXBlIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=\",\r\n\t\r\n\tQuestion: \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDQwIDQwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzLjguMyAoMjk4MDIpIC0gaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoIC0tPgogICAgPHRpdGxlPlF1ZXN0aW9uIEljb248L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iUXVlc3Rpb24tSWNvbiIgZmlsbD0iIzQxNzUwNSI+CiAgICAgICAgICAgIDxnIGlkPSI3MzktcXVlc3Rpb25AMngiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMDAwMDAwLCAxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPGcgaWQ9IkxheWVyXzEiPgogICAgICAgICAgICAgICAgICAgIDxnIGlkPSJfeDM3XzM5LXF1ZXN0aW9uX3g0MF8yeC5wbmciPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjIuNDQxMDM1NywxMS4zNDYzOTI5IEMyMi4wMzM4OTI5LDEwLjk2OTEwNzEgMjEuNTU0ODIxNCwxMC42ODAwMzU3IDIxLjAwNTE3ODYsMTAuNDc5MTc4NiBDMjAuNDU0ODU3MSwxMC4yNzc2NDI5IDE5Ljg2MzE0MjksMTAuMTc3ODkyOSAxOS4yMzA3MTQzLDEwLjE3Nzg5MjkgQzE3LjkwNDEwNzEsMTAuMTc3ODkyOSAxNi43OTE5Mjg2LDEwLjU3NTUzNTcgMTUuODk1NTM1NywxMS4zNzE1IEMxNC45OTg0NjQzLDEyLjE2Njc4NTcgMTQuNDUxNTM1NywxMy4yNjMzNTcxIDE0LjI1NjEwNzEsMTQuNjYxODkyOSBMMTYuNTYxODkyOSwxNC45MDI3ODU3IEMxNi42NTI4MjE0LDE0LjA5ODY3ODYgMTYuOTI2OTY0MywxMy40NDc5Mjg2IDE3LjM4NzcxNDMsMTIuOTQ5ODU3MSBDMTcuODQ3MTA3MSwxMi40NTI0NjQzIDE4LjQ0Njk2NDMsMTIuMjAyNzUgMTkuMTg0NTcxNCwxMi4yMDI3NSBDMTkuNTE2MzkyOSwxMi4yMDI3NSAxOS44MjkyMTQzLDEyLjI2NzIxNDMgMjAuMTIzMDM1NywxMi4zOTQ3ODU3IEMyMC40MTc1MzU3LDEyLjUyMzcxNDMgMjAuNjY5OTY0MywxMi43MDAxNDI5IDIwLjg4MSwxMi45MjU0Mjg2IEMyMS4wOTIwMzU3LDEzLjE1MDAzNTcgMjEuMjYxNjc4NiwxMy40MTk0Mjg2IDIxLjM4OTI1LDEzLjczMjI1IEMyMS41MTY4MjE0LDE0LjA0NTA3MTQgMjEuNTgxMjg1NywxNC4zODc3NSAyMS41ODEyODU3LDE0Ljc1NzU3MTQgQzIxLjU4MTI4NTcsMTUuMTI3MzkyOSAyMS41MTY4MjE0LDE1LjQ2MDU3MTQgMjEuMzg5MjUsMTUuNzU3Nzg1NyBDMjEuMjYxNjc4NiwxNi4wNTUgMjEuMDk4ODIxNCwxNi4zMzY2MDcxIDIwLjkwMzM5MjksMTYuNjAxMjUgQzIwLjcwNzI4NTcsMTYuODY2NTcxNCAyMC40ODg3ODU3LDE3LjEyNDQyODYgMjAuMjQ3MjE0MywxNy4zNzI3ODU3IEMyMC4wMDYzMjE0LDE3LjYyMTgyMTQgMTkuNzY0NzUsMTcuODY3NDY0MyAxOS41MjM4NTcxLDE4LjEwODM1NzEgQzE5LjIyMjU3MTQsMTguNDEzNzE0MyAxOC45NzAxNDI5LDE4LjY3NDk2NDMgMTguNzY2NTcxNCwxOC44OTE0Mjg2IEMxOC41NjMsMTkuMTA3ODkyOSAxOC40MDA4MjE0LDE5LjMzMzE3ODYgMTguMjgwMDM1NywxOS41NjY2MDcxIEMxOC4xNTkyNSwxOS43OTkzNTcxIDE4LjA2OSwyMC4wNjA2MDcxIDE4LjAwOTI4NTcsMjAuMzQ5Njc4NiBDMTcuOTQ4ODkyOSwyMC42Mzg3NSAxNy45MTkwMzU3LDIxLjAwMDQyODYgMTcuOTE5MDM1NywyMS40MzQ3MTQzIEwxNy45MTkwMzU3LDIyLjkwNTE3ODYgTDIwLjA4OTEwNzEsMjIuOTA1MTc4NiBMMjAuMDg5MTA3MSwyMS44NDQ1NzE0IEMyMC4wODkxMDcxLDIxLjUwNzMyMTQgMjAuMTA0MDM1NywyMS4yMjYzOTI5IDIwLjEzNDU3MTQsMjEuMDAxMTA3MSBDMjAuMTY0NDI4NiwyMC43NzY1IDIwLjIyMDc1LDIwLjU3MTU3MTQgMjAuMzAzNTM1NywyMC4zODYzMjE0IEMyMC4zODYzMjE0LDIwLjIwMjQyODYgMjAuNDk5NjQyOSwyMC4wMjUzMjE0IDIwLjY0MjgyMTQsMTkuODU2MzU3MSBDMjAuNzg2LDE5LjY4NzM5MjkgMjAuOTc4MDM1NywxOS40ODI0NjQzIDIxLjIxOTYwNzEsMTkuMjQxNTcxNCBMMjEuNDQ2MjUsMTkuMDI1MTA3MSBMMjIuODAyNzE0MywxNy41MzA4OTI5IEMyMy4xMDQsMTcuMTI5MTc4NiAyMy4zMzc0Mjg2LDE2LjY5ODk2NDMgMjMuNTAzNjc4NiwxNi4yNDE2MDcxIEMyMy42NjkyNSwxNS43ODM1NzE0IDIzLjc1MjAzNTcsMTUuMjQ4ODU3MSAyMy43NTIwMzU3LDE0LjYzODgyMTQgQzIzLjc1MjAzNTcsMTMuOTMxMDcxNCAyMy42MzUzMjE0LDEzLjMgMjMuNDAxMjE0MywxMi43NDYyODU3IEMyMy4xNjg0NjQzLDEyLjE4OTg1NzEgMjIuODQ4MTc4NiwxMS43MjM2Nzg2IDIyLjQ0MTAzNTcsMTEuMzQ2MzkyOSBMMjIuNDQxMDM1NywxMS4zNDYzOTI5IFogTTE4Ljk4MTY3ODYsMjQuNjQwMjg1NyBDMTguNTc0NTM1NywyNC42NDAyODU3IDE4LjIyNDM5MjksMjQuNzk2MzU3MSAxNy45MzA1NzE0LDI1LjEwOTg1NzEgQzE3LjYzNjA3MTQsMjUuNDIzMzU3MSAxNy40ODk1LDI1Ljc5NzI1IDE3LjQ4OTUsMjYuMjMwODU3MSBDMTcuNDg5NSwyNi42NjQ0NjQzIDE3LjYzNjc1LDI3LjAzNzY3ODYgMTcuOTMwNTcxNCwyNy4zNTExNzg2IEMxOC4yMjQzOTI5LDI3LjY2NDY3ODYgMTguNTc0NTM1NywyNy44MjE0Mjg2IDE4Ljk4MTY3ODYsMjcuODIxNDI4NiBDMTkuMzg4ODIxNCwyNy44MjE0Mjg2IDE5LjczODk2NDMsMjcuNjY0Njc4NiAyMC4wMzM0NjQzLDI3LjM1MTE3ODYgQzIwLjMyNzI4NTcsMjcuMDM3Njc4NiAyMC40NzM4NTcxLDI2LjY2NDQ2NDMgMjAuNDczODU3MSwyNi4yMzA4NTcxIEMyMC40NzM4NTcxLDI1Ljc5NzI1IDIwLjMyNjYwNzEsMjUuNDIzMzU3MSAyMC4wMzM0NjQzLDI1LjEwOTg1NzEgQzE5LjczODk2NDMsMjQuNzk3MDM1NyAxOS4zODgxNDI5LDI0LjY0MDI4NTcgMTguOTgxNjc4NiwyNC42NDAyODU3IEwxOC45ODE2Nzg2LDI0LjY0MDI4NTcgWiBNMTksMCBDOC41MDY1NzE0MywwIDAsOC41MDY1NzE0MyAwLDE5IEMwLDI5LjQ5MzQyODYgOC41MDY1NzE0MywzOCAxOSwzOCBDMjkuNDkzNDI4NiwzOCAzOCwyOS40OTM0Mjg2IDM4LDE5IEMzOCw4LjUwNjU3MTQzIDI5LjQ5MzQyODYsMCAxOSwwIEwxOSwwIFogTTE5LDM2LjY0Mjg1NzEgQzkuMjU2MzkyODYsMzYuNjQyODU3MSAxLjM1NzE0Mjg2LDI4Ljc0MzYwNzEgMS4zNTcxNDI4NiwxOSBDMS4zNTcxNDI4Niw5LjI1NjM5Mjg2IDkuMjU2MzkyODYsMS4zNTcxNDI4NiAxOSwxLjM1NzE0Mjg2IEMyOC43NDM2MDcxLDEuMzU3MTQyODYgMzYuNjQyODU3MSw5LjI1NjM5Mjg2IDM2LjY0Mjg1NzEsMTkgQzM2LjY0Mjg1NzEsMjguNzQzNjA3MSAyOC43NDM2MDcxLDM2LjY0Mjg1NzEgMTksMzYuNjQyODU3MSBMMTksMzYuNjQyODU3MSBaIiBpZD0iU2hhcGUiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==\",\r\n\t\r\n\tSuccess: \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDQwIDQwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzLjguMyAoMjk4MDIpIC0gaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoIC0tPgogICAgPHRpdGxlPlN1Y2Nlc3MgSWNvbjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJTdWNjZXNzLUljb24iIGZpbGw9IiMwMDgzMDgiPgogICAgICAgICAgICA8ZyBpZD0iODg4LWNoZWNrbWFya0AyeCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS4wMDAwMDAsIDEuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICA8ZyBpZD0iTGF5ZXJfMSI+CiAgICAgICAgICAgICAgICAgICAgPGcgaWQ9Il94MzhfODgtY2hlY2ttYXJrX3g0MF8yeC5wbmciPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjcuODIxNDI4NiwxMi44OTI4NTcxIEMyNy42MzQxNDI5LDEyLjg5Mjg1NzEgMjcuNDY0NSwxMi45Njg4NTcxIDI3LjM0MTY3ODYsMTMuMDkyMzU3MSBMMTYuOTY0Mjg1NywyMy40NjkwNzE0IEwxMC42NTgzMjE0LDE3LjE2MzEwNzEgQzEwLjUzNTUsMTcuMDQwMjg1NyAxMC4zNjU4NTcxLDE2Ljk2NDI4NTcgMTAuMTc4NTcxNCwxNi45NjQyODU3IEM5LjgwNCwxNi45NjQyODU3IDkuNSwxNy4yNjgyODU3IDkuNSwxNy42NDI4NTcxIEM5LjUsMTcuODMwMTQyOSA5LjU3NiwxNy45OTk3ODU3IDkuNjk4ODIxNDMsMTguMTIyNjA3MSBMMTYuNDg0NTM1NywyNC45MDgzMjE0IEMxNi42MDczNTcxLDI1LjAzMTgyMTQgMTYuNzc3LDI1LjEwNzE0MjkgMTYuOTY0Mjg1NywyNS4xMDcxNDI5IEMxNy4xNTE1NzE0LDI1LjEwNzE0MjkgMTcuMzIxMjE0MywyNS4wMzE4MjE0IDE3LjQ0NDAzNTcsMjQuOTA4MzIxNCBMMjguMzAxMTc4NiwxNC4wNTE4NTcxIEMyOC40MjQsMTMuOTI4MzU3MSAyOC41LDEzLjc1ODcxNDMgMjguNSwxMy41NzE0Mjg2IEMyOC41LDEzLjE5NjE3ODYgMjguMTk2Njc4NiwxMi44OTI4NTcxIDI3LjgyMTQyODYsMTIuODkyODU3MSBMMjcuODIxNDI4NiwxMi44OTI4NTcxIFogTTIxLjcxNDI4NTcsMCBMMTYuMjg1NzE0MywwIEM0LjA3MTQyODU3LDAgMCw0LjA3MTQyODU3IDAsMTYuMjg1NzE0MyBMMCwyMS43MTQyODU3IEMwLDMzLjkyODU3MTQgNC4wNzE0Mjg1NywzOCAxNi4yODU3MTQzLDM4IEwyMS43MTQyODU3LDM4IEMzMy45Mjg1NzE0LDM4IDM4LDMzLjkyODU3MTQgMzgsMjEuNzE0Mjg1NyBMMzgsMTYuMjg1NzE0MyBDMzgsNC4wNzE0Mjg1NyAzMy45Mjg1NzE0LDAgMjEuNzE0Mjg1NywwIEwyMS43MTQyODU3LDAgWiBNMzYuNjQyODU3MSwyMS41MjA4OTI5IEMzNi42NDI4NTcxLDMyLjg2MjUzNTcgMzIuODYyNTM1NywzNi42NDI4NTcxIDIxLjUyMDg5MjksMzYuNjQyODU3MSBMMTYuNDc5Nzg1NywzNi42NDI4NTcxIEM1LjEzNzQ2NDI5LDM2LjY0Mjg1NzEgMS4zNTcxNDI4NiwzMi44NjI1MzU3IDEuMzU3MTQyODYsMjEuNTIwODkyOSBMMS4zNTcxNDI4NiwxNi40Nzk3ODU3IEMxLjM1NzE0Mjg2LDUuMTM3NDY0MjkgNS4xMzc0NjQyOSwxLjM1NzE0Mjg2IDE2LjQ3OTc4NTcsMS4zNTcxNDI4NiBMMjEuNTIwODkyOSwxLjM1NzE0Mjg2IEMzMi44NjI1MzU3LDEuMzU3MTQyODYgMzYuNjQyODU3MSw1LjEzNzQ2NDI5IDM2LjY0Mjg1NzEsMTYuNDc5Nzg1NyBMMzYuNjQyODU3MSwyMS41MjA4OTI5IEwzNi42NDI4NTcxLDIxLjUyMDg5MjkgWiIgaWQ9IlNoYXBlIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=\",\r\n\t\r\n\tWarning: \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDQwIDQwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzLjguMyAoMjk4MDIpIC0gaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoIC0tPgogICAgPHRpdGxlPldhcm5pbmcgSWNvbjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJXYXJuaW5nLUljb24iIGZpbGw9IiNGRjlEMDAiPgogICAgICAgICAgICA8ZyBpZD0iNzkxLXdhcm5pbmdAMngiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMDAwMDAwLCAyLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPGcgaWQ9IkxheWVyXzEiPgogICAgICAgICAgICAgICAgICAgIDxnIGlkPSJfeDM3XzkxLXdhcm5pbmdfeDQwXzJ4LnBuZyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNy44MjM1NzE0LDMzLjI3MTAzNTcgTDM3LjgzMzA3MTQsMzMuMjY1NjA3MSBMMjAuMTY5MTc4NiwwLjY1MjEwNzE0MyBMMjAuMTU3NjQyOSwwLjY1ODg5Mjg1NyBDMTkuOTIwMTQyOSwwLjI2NiAxOS40OTMzMjE0LDAgMTksMCBDMTguNTA3MzU3MSwwIDE4LjA3OTg1NzEsMC4yNjYgMTcuODQxNjc4NiwwLjY1ODg5Mjg1NyBMMTcuODMwMTQyOSwwLjY1MjEwNzE0MyBMMC4xNjY5Mjg1NzEsMzMuMjY1NjA3MSBMMC4xNzcxMDcxNDMsMzMuMjcxMDM1NyBDMC4wNjc4NTcxNDI5LDMzLjQ2NzE0MjkgMCwzMy42ODgzNTcxIDAsMzMuOTI4NTcxNCBDMCwzNC42Nzc3MTQzIDAuNjA4LDM1LjI4NTcxNDMgMS4zNTcxNDI4NiwzNS4yODU3MTQzIEwzNi42NDI4NTcxLDM1LjI4NTcxNDMgQzM3LjM5MiwzNS4yODU3MTQzIDM4LDM0LjY3NzcxNDMgMzgsMzMuOTI4NTcxNCBDMzgsMzMuNjg4MzU3MSAzNy45MzIxNDI5LDMzLjQ2NzE0MjkgMzcuODIzNTcxNCwzMy4yNzEwMzU3IEwzNy44MjM1NzE0LDMzLjI3MTAzNTcgWiBNMzUuMjg1NzE0MywzMy45Mjg1NzE0IEwzNC42MDcxNDI5LDMzLjkyODU3MTQgTDMuMzkyODU3MTQsMzMuOTI4NTcxNCBMMi43MTQyODU3MSwzMy45Mjg1NzE0IEwxLjM1NzE0Mjg2LDMzLjkyODU3MTQgTDE5LDEuMzQyODkyODYgTDM2LjY0Mjg1NzEsMzMuOTI4NTcxNCBMMzUuMjg1NzE0MywzMy45Mjg1NzE0IEwzNS4yODU3MTQzLDMzLjkyODU3MTQgWiBNMTYuMjg1NzE0MywxMy41NzE0Mjg2IEwxNy42NDI4NTcxLDIzLjA3MTQyODYgQzE3LjY0Mjg1NzEsMjMuODIwNTcxNCAxOC4yNTA4NTcxLDI0LjQyODU3MTQgMTksMjQuNDI4NTcxNCBDMTkuNzQ5MTQyOSwyNC40Mjg1NzE0IDIwLjM1NzE0MjksMjMuODIwNTcxNCAyMC4zNTcxNDI5LDIzLjA3MTQyODYgTDIxLjcxNDI4NTcsMTMuNTcxNDI4NiBDMjEuNzE0Mjg1NywxMi44MjIyODU3IDIxLjEwNjI4NTcsMTIuMjE0Mjg1NyAyMC4zNTcxNDI5LDEyLjIxNDI4NTcgTDE3LjY0Mjg1NzEsMTIuMjE0Mjg1NyBDMTYuODkzNzE0MywxMi4yMTQyODU3IDE2LjI4NTcxNDMsMTIuODIyMjg1NyAxNi4yODU3MTQzLDEzLjU3MTQyODYgTDE2LjI4NTcxNDMsMTMuNTcxNDI4NiBaIE0xOSwyMy4wNzE0Mjg2IEwxNy42NDI4NTcxLDEzLjU3MTQyODYgTDIwLjM1NzE0MjksMTMuNTcxNDI4NiBMMTksMjMuMDcxNDI4NiBMMTksMjMuMDcxNDI4NiBaIE0xOSwyNS43ODU3MTQzIEMxNy41MDEwMzU3LDI1Ljc4NTcxNDMgMTYuMjg1NzE0MywyNy4wMDEwMzU3IDE2LjI4NTcxNDMsMjguNSBDMTYuMjg1NzE0MywyOS45OTg5NjQzIDE3LjUwMTAzNTcsMzEuMjE0Mjg1NyAxOSwzMS4yMTQyODU3IEMyMC40OTg5NjQzLDMxLjIxNDI4NTcgMjEuNzE0Mjg1NywyOS45OTg5NjQzIDIxLjcxNDI4NTcsMjguNSBDMjEuNzE0Mjg1NywyNy4wMDEwMzU3IDIwLjQ5ODk2NDMsMjUuNzg1NzE0MyAxOSwyNS43ODU3MTQzIEwxOSwyNS43ODU3MTQzIFogTTE5LDI5Ljg1NzE0MjkgQzE4LjI1MDg1NzEsMjkuODU3MTQyOSAxNy42NDI4NTcxLDI5LjI0OTE0MjkgMTcuNjQyODU3MSwyOC41IEMxNy42NDI4NTcxLDI3Ljc1MDg1NzEgMTguMjUwODU3MSwyNy4xNDI4NTcxIDE5LDI3LjE0Mjg1NzEgQzE5Ljc0OTE0MjksMjcuMTQyODU3MSAyMC4zNTcxNDI5LDI3Ljc1MDg1NzEgMjAuMzU3MTQyOSwyOC41IEMyMC4zNTcxNDI5LDI5LjI0OTE0MjkgMTkuNzQ5MTQyOSwyOS44NTcxNDI5IDE5LDI5Ljg1NzE0MjkgTDE5LDI5Ljg1NzE0MjkgWiIgaWQ9IlNoYXBlIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=\",\r\n\t\r\n\tFailed: \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDQwIDQwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzLjguMyAoMjk4MDIpIC0gaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoIC0tPgogICAgPHRpdGxlPkZhaWxlZCBJY29uPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9IkZhaWxlZC1JY29uIiBmaWxsPSIjQzAwMDAwIj4KICAgICAgICAgICAgPGcgaWQ9Ijc5MS13YXJuaW5nLXNlbGVjdGVkQDJ4IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxLjAwMDAwMCwgMi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxnIGlkPSJMYXllcl8xIj4KICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iX3gzN185MS13YXJuaW5nLXNlbGVjdGVkX3g0MF8yeC5wbmciPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMzcuODIzNTcxNCwzMy4yNzEwMzU3IEwzNy44MzMwNzE0LDMzLjI2NTYwNzEgTDIwLjE2OTE3ODYsMC42NTIxMDcxNDMgTDIwLjE1NzY0MjksMC42NTg4OTI4NTcgQzE5LjkyMDE0MjksMC4yNjYgMTkuNDkzMzIxNCwwIDE5LDAgQzE4LjUwNzM1NzEsMCAxOC4wNzk4NTcxLDAuMjY2IDE3Ljg0MTY3ODYsMC42NTg4OTI4NTcgTDE3LjgzMDE0MjksMC42NTIxMDcxNDMgTDAuMTY2OTI4NTcxLDMzLjI2NTYwNzEgTDAuMTc3MTA3MTQzLDMzLjI3MTAzNTcgQzAuMDY3ODU3MTQyOSwzMy40NjcxNDI5IDAsMzMuNjg4MzU3MSAwLDMzLjkyODU3MTQgQzAsMzQuNjc3NzE0MyAwLjYwOCwzNS4yODU3MTQzIDEuMzU3MTQyODYsMzUuMjg1NzE0MyBMMzYuNjQyODU3MSwzNS4yODU3MTQzIEMzNy4zOTIsMzUuMjg1NzE0MyAzOCwzNC42Nzc3MTQzIDM4LDMzLjkyODU3MTQgQzM4LDMzLjY4ODM1NzEgMzcuOTMyMTQyOSwzMy40NjcxNDI5IDM3LjgyMzU3MTQsMzMuMjcxMDM1NyBMMzcuODIzNTcxNCwzMy4yNzEwMzU3IFogTTE5LDMxLjIxNDI4NTcgQzE3LjUwMTAzNTcsMzEuMjE0Mjg1NyAxNi4yODU3MTQzLDI5Ljk5ODk2NDMgMTYuMjg1NzE0MywyOC41IEMxNi4yODU3MTQzLDI3LjAwMTAzNTcgMTcuNTAxMDM1NywyNS43ODU3MTQzIDE5LDI1Ljc4NTcxNDMgQzIwLjQ5ODk2NDMsMjUuNzg1NzE0MyAyMS43MTQyODU3LDI3LjAwMTAzNTcgMjEuNzE0Mjg1NywyOC41IEMyMS43MTQyODU3LDI5Ljk5ODk2NDMgMjAuNDk4OTY0MywzMS4yMTQyODU3IDE5LDMxLjIxNDI4NTcgTDE5LDMxLjIxNDI4NTcgWiBNMjAuMzU3MTQyOSwyMy4wNzE0Mjg2IEMyMC4zNTcxNDI5LDIzLjgyMDU3MTQgMTkuNzQ5MTQyOSwyNC40Mjg1NzE0IDE5LDI0LjQyODU3MTQgQzE4LjI1MDg1NzEsMjQuNDI4NTcxNCAxNy42NDI4NTcxLDIzLjgyMDU3MTQgMTcuNjQyODU3MSwyMy4wNzE0Mjg2IEwxNi4yODU3MTQzLDEzLjU3MTQyODYgQzE2LjI4NTcxNDMsMTIuODIyMjg1NyAxNi44OTM3MTQzLDEyLjIxNDI4NTcgMTcuNjQyODU3MSwxMi4yMTQyODU3IEwyMC4zNTcxNDI5LDEyLjIxNDI4NTcgQzIxLjEwNjI4NTcsMTIuMjE0Mjg1NyAyMS43MTQyODU3LDEyLjgyMjI4NTcgMjEuNzE0Mjg1NywxMy41NzE0Mjg2IEwyMC4zNTcxNDI5LDIzLjA3MTQyODYgTDIwLjM1NzE0MjksMjMuMDcxNDI4NiBaIiBpZD0iU2hhcGUiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==\",\r\n\t\r\n\tDeleted: \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDQwIDQwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzLjguMyAoMjk4MDIpIC0gaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoIC0tPgogICAgPHRpdGxlPlRyYXNoIEljb248L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iVHJhc2gtSWNvbiIgZmlsbD0iIzAwMDAwMCI+CiAgICAgICAgICAgIDxnIGlkPSI3MTEtdHJhc2hAMngiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYuMDAwMDAwLCAxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPGcgaWQ9IkxheWVyXzEiPgogICAgICAgICAgICAgICAgICAgIDxnIGlkPSJfeDM3XzExLXRyYXNoX3g0MF8yeC5wbmciPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOC4xMTAyODU3MSw4LjE0MzUzNTcxIEM3LjczNjM5Mjg2LDguMTY1MjUgNy40NTA3MTQyOSw4LjQ4NzU3MTQzIDcuNDcyNDI4NTcsOC44NjIxNDI4NiBMOC44MjI3ODU3MSwzMy4yOTEzOTI5IEM4Ljg0NDUsMzMuNjY2NjQyOSA5LjE2NTQ2NDI5LDMzLjk1MjMyMTQgOS41NDAwMzU3MSwzMy45Mjk5Mjg2IEM5LjkxNDYwNzE0LDMzLjkwNzUzNTcgMTAuMTk5NjA3MSwzMy41ODY1NzE0IDEwLjE3Nzg5MjksMzMuMjExMzIxNCBMOC44Mjc1MzU3MSw4Ljc4MjA3MTQzIEM4LjgwNTE0Mjg2LDguNDA4MTc4NTcgOC40ODQxNzg1Nyw4LjEyMTgyMTQzIDguMTEwMjg1NzEsOC4xNDM1MzU3MSBMOC4xMTAyODU3MSw4LjE0MzUzNTcxIFogTTE0LjI1LDguMTQyODU3MTQgQzEzLjg3NTQyODYsOC4xNDI4NTcxNCAxMy41NzE0Mjg2LDguNDQ2ODU3MTQgMTMuNTcxNDI4Niw4LjgyMTQyODU3IEwxMy41NzE0Mjg2LDMzLjI1IEMxMy41NzE0Mjg2LDMzLjYyNTI1IDEzLjg3NTQyODYsMzMuOTI4NTcxNCAxNC4yNSwzMy45Mjg1NzE0IEMxNC42MjUyNSwzMy45Mjg1NzE0IDE0LjkyODU3MTQsMzMuNjI1MjUgMTQuOTI4NTcxNCwzMy4yNSBMMTQuOTI4NTcxNCw4LjgyMTQyODU3IEMxNC45Mjg1NzE0LDguNDQ2ODU3MTQgMTQuNjI1MjUsOC4xNDI4NTcxNCAxNC4yNSw4LjE0Mjg1NzE0IEwxNC4yNSw4LjE0Mjg1NzE0IFogTTI3LjgyMTQyODYsNC4wNzE0Mjg1NyBMMjAuMzU3MTQyOSw0LjA3MTQyODU3IEwyMC4zNTcxNDI5LDIuNzE0Mjg1NzEgQzIwLjM1NzE0MjksMS4yMTUzMjE0MyAxOS4xNDE4MjE0LDAgMTcuNjQyODU3MSwwIEwxMC44NTcxNDI5LDAgQzkuMzU4MTc4NTcsMCA4LjE0Mjg1NzE0LDEuMjE1MzIxNDMgOC4xNDI4NTcxNCwyLjcxNDI4NTcxIEw4LjE0Mjg1NzE0LDQuMDcxNDI4NTcgTDAuNjc4NTcxNDI5LDQuMDcxNDI4NTcgQzAuMzA0LDQuMDcxNDI4NTcgMCw0LjM3NTQyODU3IDAsNC43NSBDMCw1LjEyNTI1IDAuMzA0LDUuNDI4NTcxNDMgMC42Nzg1NzE0MjksNS40Mjg1NzE0MyBMMS4zNTcxNDI4Niw1LjQyODU3MTQzIEw0LjA3MTQyODU3LDM1LjI4NTcxNDMgQzQuMDcxNDI4NTcsMzYuNzg0Njc4NiA1LjI4Njc1LDM4IDYuNzg1NzE0MjksMzggTDIxLjcxNDI4NTcsMzggQzIzLjIxMzI1LDM4IDI0LjQyODU3MTQsMzYuNzg0Njc4NiAyNC40Mjg1NzE0LDM1LjI4NTcxNDMgTDI3LjE0Mjg1NzEsNS40Mjg1NzE0MyBMMjcuODIxNDI4Niw1LjQyODU3MTQzIEMyOC4xOTY2Nzg2LDUuNDI4NTcxNDMgMjguNSw1LjEyNTI1IDI4LjUsNC43NSBDMjguNSw0LjM3NTQyODU3IDI4LjE5NjY3ODYsNC4wNzE0Mjg1NyAyNy44MjE0Mjg2LDQuMDcxNDI4NTcgTDI3LjgyMTQyODYsNC4wNzE0Mjg1NyBaIE05LjUsMi43MTQyODU3MSBDOS41LDEuOTY1MTQyODYgMTAuMTA4LDEuMzU3MTQyODYgMTAuODU3MTQyOSwxLjM1NzE0Mjg2IEwxNy42NDI4NTcxLDEuMzU3MTQyODYgQzE4LjM5MiwxLjM1NzE0Mjg2IDE5LDEuOTY1MTQyODYgMTksMi43MTQyODU3MSBMMTksNC4wNzE0Mjg1NyBMOS41LDQuMDcxNDI4NTcgTDkuNSwyLjcxNDI4NTcxIEw5LjUsMi43MTQyODU3MSBaIE0yMy4wNzE0Mjg2LDM1LjI4NTcxNDMgQzIzLjA3MTQyODYsMzYuMDM0ODU3MSAyMi40NjM0Mjg2LDM2LjY0Mjg1NzEgMjEuNzE0Mjg1NywzNi42NDI4NTcxIEw2Ljc4NTcxNDI5LDM2LjY0Mjg1NzEgQzYuMDM2NTcxNDMsMzYuNjQyODU3MSA1LjQyODU3MTQzLDM2LjAzNDg1NzEgNS40Mjg1NzE0MywzNS4yODU3MTQzIEwyLjcxNDI4NTcxLDUuNDI4NTcxNDMgTDguMTQyODU3MTQsNS40Mjg1NzE0MyBMOS41LDUuNDI4NTcxNDMgTDE5LDUuNDI4NTcxNDMgTDIwLjM1NzE0MjksNS40Mjg1NzE0MyBMMjUuNzg1NzE0Myw1LjQyODU3MTQzIEwyMy4wNzE0Mjg2LDM1LjI4NTcxNDMgTDIzLjA3MTQyODYsMzUuMjg1NzE0MyBaIE0xOS42NzI0NjQzLDguODI0MTQyODYgTDE4LjMyMjc4NTcsMzMuMjEyNjc4NiBDMTguMzAxMDcxNCwzMy41ODcyNSAxOC41ODYwNzE0LDMzLjkwNzUzNTcgMTguOTU5OTY0MywzMy45Mjk5Mjg2IEMxOS4zMzM4NTcxLDMzLjk1MjMyMTQgMTkuNjU0ODIxNCwzMy42NjU5NjQzIDE5LjY3NzIxNDMsMzMuMjkyNzUgTDIxLjAyNzU3MTQsOC45MDM1MzU3MSBDMjEuMDQ5Mjg1Nyw4LjUyOTY0Mjg2IDIwLjc2MzYwNzEsOC4yMDg2Nzg1NyAyMC4zOTAzOTI5LDguMTg2Mjg1NzEgQzIwLjAxNTgyMTQsOC4xNjM4OTI4NiAxOS42OTQ4NTcxLDguNDQ5NTcxNDMgMTkuNjcyNDY0Myw4LjgyNDE0Mjg2IEwxOS42NzI0NjQzLDguODI0MTQyODYgWiIgaWQ9IlNoYXBlIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=\"\r\n\t\r\n}"],"names":["sanitize","html","options","Coach","constructor","str","this","i","allowedTags","includes","allowedAttributes","length","isTag","isWhiteTag","start","tagName","readTagName","cutTag","stripAttributes","skipSpace","char","test","toLowerCase","cutSubstring","isAttr","attrName","readAttrName","attrValue","isAttrValue","readAttrValue","end","isValidAttr","isValidURL","href","trim","quotes","value","endPart","slice","skipTagName","startPosition","exec","module","exports","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","EventSource","when","eventName","callback","_eventListeners","Promise","onSuccess","onFail","_removeAfterCall","push","on","apply","arguments","addEventListener","emit","callbacks","args","splice","trigger","triggerEvent","mixin","otherClass","Queue","super","items","current","add","item","activateHandler","setTimeout","checkActivated","bind","resp","remove","JSAlert","version","static","text","title","icon","closeText","window","resolve","console","log","alert","addButton","setIcon","Icons","Information","show","acceptText","rejectText","Question","defaultText","placeholderText","addTextField","then","result","cancelled","getTextFieldValue","cancelable","elems","buttons","textFields","iconURL","dismissed","type","placeholder","index","info","elem","popupQueue","_show","func","dismiss","removeElements","removeEventListener","dismissIn","time","createBackground","createPopup","background","document","createElement","style","cssText","body","appendChild","offsetWidth","opacity","container","focusable","transform","addTouchHandler","src","innerHTML","forEach","b","idx","e","keyCode","focus","btn","innerText","removeElement","parentNode","removeChild","handler","target","nodeName","preventDefault","handleEvent","Success","Warning","Failed","Deleted"],"sourceRoot":""}