{"version":3,"sources":["webpack:///(webpack)/buildin/global.js","webpack:///./.yarn/cache/prismjs-npm-1.29.0-6faa5b04b8-007a8869d4.zip/node_modules/prismjs/prism.js","webpack:///./.yarn/cache/prismjs-npm-1.29.0-6faa5b04b8-007a8869d4.zip/node_modules/prismjs/components/prism-java.js","webpack:///./.yarn/cache/prismjs-npm-1.29.0-6faa5b04b8-007a8869d4.zip/node_modules/prismjs/plugins/toolbar/prism-toolbar.js","webpack:///./.yarn/cache/prismjs-npm-1.29.0-6faa5b04b8-007a8869d4.zip/node_modules/prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard.js","webpack:///./.yarn/cache/prismjs-npm-1.29.0-6faa5b04b8-007a8869d4.zip/node_modules/prismjs/plugins/line-numbers/prism-line-numbers.js"],"names":["g","this","Function","e","window","module","exports","Prism","_self","lang","uniqueId","plainTextGrammar","_","manual","disableWorkerMessageHandler","util","encode","tokens","Token","type","content","alias","Array","isArray","map","replace","o","Object","prototype","toString","call","slice","objId","obj","defineProperty","value","clone","deepClone","visited","id","key","hasOwnProperty","forEach","v","i","getLanguage","element","m","exec","className","toLowerCase","parentElement","setLanguage","language","RegExp","classList","add","currentScript","document","Error","err","src","stack","scripts","getElementsByTagName","isActive","defaultActivation","no","contains","languages","plain","plaintext","text","txt","extend","redef","insertBefore","inside","before","insert","root","grammar","ret","token","newToken","old","DFS","callback","property","propertyType","plugins","highlightAll","async","highlightAllUnder","container","env","selector","hooks","run","elements","apply","querySelectorAll","highlightElement","parent","nodeName","code","textContent","insertHighlightedCode","highlightedCode","innerHTML","hasAttribute","setAttribute","Worker","worker","filename","onmessage","evt","data","postMessage","JSON","stringify","immediateClose","highlight","tokenize","rest","tokenList","LinkedList","addAfter","head","matchGrammar","list","array","node","next","tail","push","toArray","all","name","callbacks","length","matchedStr","matchPattern","pattern","pos","lookbehind","lastIndex","match","lookbehindLength","index","startNode","startPos","rematch","patterns","j","cause","patternObj","greedy","global","flags","source","currentNode","reach","str","removeCount","from","to","p","k","matchStr","after","removeFrom","prev","removeRange","nestedRematch","newNode","count","s","tag","classes","attributes","aliases","join","addEventListener","message","parse","close","script","highlightAutomaticallyCallback","readyState","defer","requestAnimationFrame","setTimeout","WorkerGlobalScope","self","markup","tagName","includedCdataInside","def","attrName","html","mathml","svg","xml","ssml","atom","rss","string","css","addInlined","addAttribute","clike","javascript","regex","js","Element","matches","msMatchesSelector","webkitMatchesSelector","EXTENSIONS","STATUS_ATTR","STATUS_LOADING","STATUS_LOADED","SELECTOR","pre","appendChild","createElement","getAttribute","extension","autoloader","loadLanguages","success","error","xhr","XMLHttpRequest","open","onreadystatechange","status","responseText","statusText","send","loadFile","range","start","Number","comma","end","undefined","parseRange","lines","split","Math","max","min","String","fileHighlight","logged","console","warn","arguments","keywords","classNamePrefix","java","function","namespace","noop","toolbar","registerButton","opts","onClick","url","href","hook","parentNode","test","wrapper","elementCallbacks","order","trim","getOrder","item","template","querySelector","registerClipboard","copyInfo","navigator","clipboard","writeText","getText","then","fallbackCopyTextToClipboard","copyTextToClipboard","textArea","style","top","left","position","body","focus","select","successful","execCommand","removeChild","settings","startElement","attr","getSettings","linkCopy","linkSpan","setState","resetText","getSelection","selectAllChildren","selectElementText","state","PLUGIN_NAME","NEW_LINE_EXP","config","lineNumbers","getLine","number","lineNumberRows","lineNumberStart","parseInt","lineNumberEnd","children","lineIndex","resize","resizeElements","assumeViewportIndependence","lastWidth","innerWidth","remove","lineNumbersWrapper","linesNum","counterReset","filter","whiteSpace","getComputedStyle","currentStyle","getStyles","infos","codeElement","lineNumberSizer","codeLines","display","oneLinerHeight","getBoundingClientRect","height","lineHeights","sizer","Boolean","info","line","childIndex","lineNumber"],"mappings":"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","file":"js/53-4cc0c4ee7c01caf556ea.chunk.js","sourcesContent":["var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","\n/* **********************************************\n Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {} // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&').replace(/</g, '<').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null) === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123) === 'Number'\n\t\t\t * type('foo') === 'String'\n\t\t\t * type(true) === 'Boolean'\n\t\t\t * type([1, 2]) === 'Array'\n\t\t\t * type({}) === 'Object'\n\t\t\t * type(String) === 'Function'\n\t\t\t * type(/abc+/) === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif ('currentScript' in document && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t// at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t// at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t * // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t * // at its original position\n\t\t\t * 'comment': { ... },\n\t\t\t * // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t * 'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t * // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t * 'style': {\n\t\t\t * // token\n\t\t\t * }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t * 'comment': Prism.languages.markup.comment,\n\t\t\t * // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t * if (token instanceof Prism.Token && token.type === 'number') {\n\t\t * console.log(`Found numeric literal: ${token.content}`);\n\t\t * }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t// @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t * The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '"') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n","(function (Prism) {\n\n\tvar keywords = /\\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\\s*[(){}[\\]<>=%~.:,;?+\\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\\b/;\n\n\t// full package (optional) + parent classes (optional)\n\tvar classNamePrefix = /(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*/.source;\n\n\t// based on the java naming conventions\n\tvar className = {\n\t\tpattern: RegExp(/(^|[^\\w.])/.source + classNamePrefix + /[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b/.source),\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'namespace': {\n\t\t\t\tpattern: /^[a-z]\\w*(?:\\s*\\.\\s*[a-z]\\w*)*(?:\\s*\\.)?/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\./\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\./\n\t\t}\n\t};\n\n\tPrism.languages.java = Prism.languages.extend('clike', {\n\t\t'string': {\n\t\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t'class-name': [\n\t\t\tclassName,\n\t\t\t{\n\t\t\t\t// variables, parameters, and constructor references\n\t\t\t\t// this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods)\n\t\t\t\tpattern: RegExp(/(^|[^\\w.])/.source + classNamePrefix + /[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()]|\\s*(?:\\[[\\s,]*\\]\\s*)?::\\s*new\\b)/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: className.inside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// class names based on keyword\n\t\t\t\t// this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods)\n\t\t\t\tpattern: RegExp(/(\\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\\s+)/.source + classNamePrefix + /[A-Z]\\w*\\b/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: className.inside\n\t\t\t}\n\t\t],\n\t\t'keyword': keywords,\n\t\t'function': [\n\t\t\tPrism.languages.clike.function,\n\t\t\t{\n\t\t\t\tpattern: /(::\\s*)[a-z_]\\w*/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'number': /\\b0b[01][01_]*L?\\b|\\b0x(?:\\.[\\da-f_p+-]+|[\\da-f_]+(?:\\.[\\da-f_p+-]+)?)\\b|(?:\\b\\d[\\d_]*(?:\\.[\\d_]*)?|\\B\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[dfl]?/i,\n\t\t'operator': {\n\t\t\tpattern: /(^|[^.])(?:<<=?|>>>?=?|->|--|\\+\\+|&&|\\|\\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'constant': /\\b[A-Z][A-Z_\\d]+\\b/\n\t});\n\n\tPrism.languages.insertBefore('java', 'string', {\n\t\t'triple-quoted-string': {\n\t\t\t// http://openjdk.java.net/jeps/355#Description\n\t\t\tpattern: /\"\"\"[ \\t]*[\\r\\n](?:(?:\"|\"\")?(?:\\\\.|[^\"\\\\]))*\"\"\"/,\n\t\t\tgreedy: true,\n\t\t\talias: 'string'\n\t\t},\n\t\t'char': {\n\t\t\tpattern: /'(?:\\\\.|[^'\\\\\\r\\n]){1,6}'/,\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('java', 'class-name', {\n\t\t'annotation': {\n\t\t\tpattern: /(^|[^.])@\\w+(?:\\s*\\.\\s*\\w+)*/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'generics': {\n\t\t\tpattern: /<(?:[\\w\\s,.?]|&(?!&)|<(?:[\\w\\s,.?]|&(?!&)|<(?:[\\w\\s,.?]|&(?!&)|<(?:[\\w\\s,.?]|&(?!&))*>)*>)*>)*>/,\n\t\t\tinside: {\n\t\t\t\t'class-name': className,\n\t\t\t\t'keyword': keywords,\n\t\t\t\t'punctuation': /[<>(),.:]/,\n\t\t\t\t'operator': /[?&|]/\n\t\t\t}\n\t\t},\n\t\t'import': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\bimport\\s+)/.source + classNamePrefix + /(?:[A-Z]\\w*|\\*)(?=\\s*;)/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': className.inside.namespace,\n\t\t\t\t\t'punctuation': /\\./,\n\t\t\t\t\t'operator': /\\*/,\n\t\t\t\t\t'class-name': /\\w+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\bimport\\s+static\\s+)/.source + classNamePrefix + /(?:\\w+|\\*)(?=\\s*;)/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'static',\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': className.inside.namespace,\n\t\t\t\t\t'static': /\\b\\w+$/,\n\t\t\t\t\t'punctuation': /\\./,\n\t\t\t\t\t'operator': /\\*/,\n\t\t\t\t\t'class-name': /\\w+/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'namespace': {\n\t\t\tpattern: RegExp(\n\t\t\t\t/(\\b(?:exports|import(?:\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\s+)(?!<keyword>)[a-z]\\w*(?:\\.[a-z]\\w*)*\\.?/\n\t\t\t\t\t.source.replace(/<keyword>/g, function () { return keywords.source; })),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /\\./,\n\t\t\t}\n\t\t}\n\t});\n}(Prism));\n","(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\tvar callbacks = [];\n\tvar map = {};\n\tvar noop = function () {};\n\n\tPrism.plugins.toolbar = {};\n\n\t/**\n\t * @typedef ButtonOptions\n\t * @property {string} text The text displayed.\n\t * @property {string} [url] The URL of the link which will be created.\n\t * @property {Function} [onClick] The event listener for the `click` event of the created button.\n\t * @property {string} [className] The class attribute to include with element.\n\t */\n\n\t/**\n\t * Register a button callback with the toolbar.\n\t *\n\t * @param {string} key\n\t * @param {ButtonOptions|Function} opts\n\t */\n\tvar registerButton = Prism.plugins.toolbar.registerButton = function (key, opts) {\n\t\tvar callback;\n\n\t\tif (typeof opts === 'function') {\n\t\t\tcallback = opts;\n\t\t} else {\n\t\t\tcallback = function (env) {\n\t\t\t\tvar element;\n\n\t\t\t\tif (typeof opts.onClick === 'function') {\n\t\t\t\t\telement = document.createElement('button');\n\t\t\t\t\telement.type = 'button';\n\t\t\t\t\telement.addEventListener('click', function () {\n\t\t\t\t\t\topts.onClick.call(this, env);\n\t\t\t\t\t});\n\t\t\t\t} else if (typeof opts.url === 'string') {\n\t\t\t\t\telement = document.createElement('a');\n\t\t\t\t\telement.href = opts.url;\n\t\t\t\t} else {\n\t\t\t\t\telement = document.createElement('span');\n\t\t\t\t}\n\n\t\t\t\tif (opts.className) {\n\t\t\t\t\telement.classList.add(opts.className);\n\t\t\t\t}\n\n\t\t\t\telement.textContent = opts.text;\n\n\t\t\t\treturn element;\n\t\t\t};\n\t\t}\n\n\t\tif (key in map) {\n\t\t\tconsole.warn('There is a button with the key \"' + key + '\" registered already.');\n\t\t\treturn;\n\t\t}\n\n\t\tcallbacks.push(map[key] = callback);\n\t};\n\n\t/**\n\t * Returns the callback order of the given element.\n\t *\n\t * @param {HTMLElement} element\n\t * @returns {string[] | undefined}\n\t */\n\tfunction getOrder(element) {\n\t\twhile (element) {\n\t\t\tvar order = element.getAttribute('data-toolbar-order');\n\t\t\tif (order != null) {\n\t\t\t\torder = order.trim();\n\t\t\t\tif (order.length) {\n\t\t\t\t\treturn order.split(/\\s*,\\s*/g);\n\t\t\t\t} else {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}\n\t\t\telement = element.parentElement;\n\t\t}\n\t}\n\n\t/**\n\t * Post-highlight Prism hook callback.\n\t *\n\t * @param env\n\t */\n\tvar hook = Prism.plugins.toolbar.hook = function (env) {\n\t\t// Check if inline or actual code block (credit to line-numbers plugin)\n\t\tvar pre = env.element.parentNode;\n\t\tif (!pre || !/pre/i.test(pre.nodeName)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Autoloader rehighlights, so only do this once.\n\t\tif (pre.parentNode.classList.contains('code-toolbar')) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Create wrapper for <pre> to prevent scrolling toolbar with content\n\t\tvar wrapper = document.createElement('div');\n\t\twrapper.classList.add('code-toolbar');\n\t\tpre.parentNode.insertBefore(wrapper, pre);\n\t\twrapper.appendChild(pre);\n\n\t\t// Setup the toolbar\n\t\tvar toolbar = document.createElement('div');\n\t\ttoolbar.classList.add('toolbar');\n\n\t\t// order callbacks\n\t\tvar elementCallbacks = callbacks;\n\t\tvar order = getOrder(env.element);\n\t\tif (order) {\n\t\t\telementCallbacks = order.map(function (key) {\n\t\t\t\treturn map[key] || noop;\n\t\t\t});\n\t\t}\n\n\t\telementCallbacks.forEach(function (callback) {\n\t\t\tvar element = callback(env);\n\n\t\t\tif (!element) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar item = document.createElement('div');\n\t\t\titem.classList.add('toolbar-item');\n\n\t\t\titem.appendChild(element);\n\t\t\ttoolbar.appendChild(item);\n\t\t});\n\n\t\t// Add our toolbar to the currently created wrapper of <pre> tag\n\t\twrapper.appendChild(toolbar);\n\t};\n\n\tregisterButton('label', function (env) {\n\t\tvar pre = env.element.parentNode;\n\t\tif (!pre || !/pre/i.test(pre.nodeName)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!pre.hasAttribute('data-label')) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar element; var template;\n\t\tvar text = pre.getAttribute('data-label');\n\t\ttry {\n\t\t\t// Any normal text will blow up this selector.\n\t\t\ttemplate = document.querySelector('template#' + text);\n\t\t} catch (e) { /* noop */ }\n\n\t\tif (template) {\n\t\t\telement = template.content;\n\t\t} else {\n\t\t\tif (pre.hasAttribute('data-url')) {\n\t\t\t\telement = document.createElement('a');\n\t\t\t\telement.href = pre.getAttribute('data-url');\n\t\t\t} else {\n\t\t\t\telement = document.createElement('span');\n\t\t\t}\n\n\t\t\telement.textContent = text;\n\t\t}\n\n\t\treturn element;\n\t});\n\n\t/**\n\t * Register the toolbar with Prism.\n\t */\n\tPrism.hooks.add('complete', hook);\n}());\n","(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\tif (!Prism.plugins.toolbar) {\n\t\tconsole.warn('Copy to Clipboard plugin loaded before Toolbar plugin.');\n\n\t\treturn;\n\t}\n\n\t/**\n\t * When the given elements is clicked by the user, the given text will be copied to clipboard.\n\t *\n\t * @param {HTMLElement} element\n\t * @param {CopyInfo} copyInfo\n\t *\n\t * @typedef CopyInfo\n\t * @property {() => string} getText\n\t * @property {() => void} success\n\t * @property {(reason: unknown) => void} error\n\t */\n\tfunction registerClipboard(element, copyInfo) {\n\t\telement.addEventListener('click', function () {\n\t\t\tcopyTextToClipboard(copyInfo);\n\t\t});\n\t}\n\n\t// https://stackoverflow.com/a/30810322/7595472\n\n\t/** @param {CopyInfo} copyInfo */\n\tfunction fallbackCopyTextToClipboard(copyInfo) {\n\t\tvar textArea = document.createElement('textarea');\n\t\ttextArea.value = copyInfo.getText();\n\n\t\t// Avoid scrolling to bottom\n\t\ttextArea.style.top = '0';\n\t\ttextArea.style.left = '0';\n\t\ttextArea.style.position = 'fixed';\n\n\t\tdocument.body.appendChild(textArea);\n\t\ttextArea.focus();\n\t\ttextArea.select();\n\n\t\ttry {\n\t\t\tvar successful = document.execCommand('copy');\n\t\t\tsetTimeout(function () {\n\t\t\t\tif (successful) {\n\t\t\t\t\tcopyInfo.success();\n\t\t\t\t} else {\n\t\t\t\t\tcopyInfo.error();\n\t\t\t\t}\n\t\t\t}, 1);\n\t\t} catch (err) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tcopyInfo.error(err);\n\t\t\t}, 1);\n\t\t}\n\n\t\tdocument.body.removeChild(textArea);\n\t}\n\t/** @param {CopyInfo} copyInfo */\n\tfunction copyTextToClipboard(copyInfo) {\n\t\tif (navigator.clipboard) {\n\t\t\tnavigator.clipboard.writeText(copyInfo.getText()).then(copyInfo.success, function () {\n\t\t\t\t// try the fallback in case `writeText` didn't work\n\t\t\t\tfallbackCopyTextToClipboard(copyInfo);\n\t\t\t});\n\t\t} else {\n\t\t\tfallbackCopyTextToClipboard(copyInfo);\n\t\t}\n\t}\n\n\t/**\n\t * Selects the text content of the given element.\n\t *\n\t * @param {Element} element\n\t */\n\tfunction selectElementText(element) {\n\t\t// https://stackoverflow.com/a/20079910/7595472\n\t\twindow.getSelection().selectAllChildren(element);\n\t}\n\n\t/**\n\t * Traverses up the DOM tree to find data attributes that override the default plugin settings.\n\t *\n\t * @param {Element} startElement An element to start from.\n\t * @returns {Settings} The plugin settings.\n\t * @typedef {Record<\"copy\" | \"copy-error\" | \"copy-success\" | \"copy-timeout\", string | number>} Settings\n\t */\n\tfunction getSettings(startElement) {\n\t\t/** @type {Settings} */\n\t\tvar settings = {\n\t\t\t'copy': 'Copy',\n\t\t\t'copy-error': 'Press Ctrl+C to copy',\n\t\t\t'copy-success': 'Copied!',\n\t\t\t'copy-timeout': 5000\n\t\t};\n\n\t\tvar prefix = 'data-prismjs-';\n\t\tfor (var key in settings) {\n\t\t\tvar attr = prefix + key;\n\t\t\tvar element = startElement;\n\t\t\twhile (element && !element.hasAttribute(attr)) {\n\t\t\t\telement = element.parentElement;\n\t\t\t}\n\t\t\tif (element) {\n\t\t\t\tsettings[key] = element.getAttribute(attr);\n\t\t\t}\n\t\t}\n\t\treturn settings;\n\t}\n\n\tPrism.plugins.toolbar.registerButton('copy-to-clipboard', function (env) {\n\t\tvar element = env.element;\n\n\t\tvar settings = getSettings(element);\n\n\t\tvar linkCopy = document.createElement('button');\n\t\tlinkCopy.className = 'copy-to-clipboard-button';\n\t\tlinkCopy.setAttribute('type', 'button');\n\t\tvar linkSpan = document.createElement('span');\n\t\tlinkCopy.appendChild(linkSpan);\n\n\t\tsetState('copy');\n\n\t\tregisterClipboard(linkCopy, {\n\t\t\tgetText: function () {\n\t\t\t\treturn element.textContent;\n\t\t\t},\n\t\t\tsuccess: function () {\n\t\t\t\tsetState('copy-success');\n\n\t\t\t\tresetText();\n\t\t\t},\n\t\t\terror: function () {\n\t\t\t\tsetState('copy-error');\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tselectElementText(element);\n\t\t\t\t}, 1);\n\n\t\t\t\tresetText();\n\t\t\t}\n\t\t});\n\n\t\treturn linkCopy;\n\n\t\tfunction resetText() {\n\t\t\tsetTimeout(function () { setState('copy'); }, settings['copy-timeout']);\n\t\t}\n\n\t\t/** @param {\"copy\" | \"copy-error\" | \"copy-success\"} state */\n\t\tfunction setState(state) {\n\t\t\tlinkSpan.textContent = settings[state];\n\t\t\tlinkCopy.setAttribute('data-copy-state', state);\n\t\t}\n\t});\n}());\n","(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t/**\n\t * Plugin name which is used as a class name for <pre> which is activating the plugin\n\t *\n\t * @type {string}\n\t */\n\tvar PLUGIN_NAME = 'line-numbers';\n\n\t/**\n\t * Regular expression used for determining line breaks\n\t *\n\t * @type {RegExp}\n\t */\n\tvar NEW_LINE_EXP = /\\n(?!$)/g;\n\n\n\t/**\n\t * Global exports\n\t */\n\tvar config = Prism.plugins.lineNumbers = {\n\t\t/**\n\t\t * Get node for provided line number\n\t\t *\n\t\t * @param {Element} element pre element\n\t\t * @param {number} number line number\n\t\t * @returns {Element|undefined}\n\t\t */\n\t\tgetLine: function (element, number) {\n\t\t\tif (element.tagName !== 'PRE' || !element.classList.contains(PLUGIN_NAME)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar lineNumberRows = element.querySelector('.line-numbers-rows');\n\t\t\tif (!lineNumberRows) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar lineNumberStart = parseInt(element.getAttribute('data-start'), 10) || 1;\n\t\t\tvar lineNumberEnd = lineNumberStart + (lineNumberRows.children.length - 1);\n\n\t\t\tif (number < lineNumberStart) {\n\t\t\t\tnumber = lineNumberStart;\n\t\t\t}\n\t\t\tif (number > lineNumberEnd) {\n\t\t\t\tnumber = lineNumberEnd;\n\t\t\t}\n\n\t\t\tvar lineIndex = number - lineNumberStart;\n\n\t\t\treturn lineNumberRows.children[lineIndex];\n\t\t},\n\n\t\t/**\n\t\t * Resizes the line numbers of the given element.\n\t\t *\n\t\t * This function will not add line numbers. It will only resize existing ones.\n\t\t *\n\t\t * @param {HTMLElement} element A `<pre>` element with line numbers.\n\t\t * @returns {void}\n\t\t */\n\t\tresize: function (element) {\n\t\t\tresizeElements([element]);\n\t\t},\n\n\t\t/**\n\t\t * Whether the plugin can assume that the units font sizes and margins are not depended on the size of\n\t\t * the current viewport.\n\t\t *\n\t\t * Setting this to `true` will allow the plugin to do certain optimizations for better performance.\n\t\t *\n\t\t * Set this to `false` if you use any of the following CSS units: `vh`, `vw`, `vmin`, `vmax`.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tassumeViewportIndependence: true\n\t};\n\n\t/**\n\t * Resizes the given elements.\n\t *\n\t * @param {HTMLElement[]} elements\n\t */\n\tfunction resizeElements(elements) {\n\t\telements = elements.filter(function (e) {\n\t\t\tvar codeStyles = getStyles(e);\n\t\t\tvar whiteSpace = codeStyles['white-space'];\n\t\t\treturn whiteSpace === 'pre-wrap' || whiteSpace === 'pre-line';\n\t\t});\n\n\t\tif (elements.length == 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar infos = elements.map(function (element) {\n\t\t\tvar codeElement = element.querySelector('code');\n\t\t\tvar lineNumbersWrapper = element.querySelector('.line-numbers-rows');\n\t\t\tif (!codeElement || !lineNumbersWrapper) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\t/** @type {HTMLElement} */\n\t\t\tvar lineNumberSizer = element.querySelector('.line-numbers-sizer');\n\t\t\tvar codeLines = codeElement.textContent.split(NEW_LINE_EXP);\n\n\t\t\tif (!lineNumberSizer) {\n\t\t\t\tlineNumberSizer = document.createElement('span');\n\t\t\t\tlineNumberSizer.className = 'line-numbers-sizer';\n\n\t\t\t\tcodeElement.appendChild(lineNumberSizer);\n\t\t\t}\n\n\t\t\tlineNumberSizer.innerHTML = '0';\n\t\t\tlineNumberSizer.style.display = 'block';\n\n\t\t\tvar oneLinerHeight = lineNumberSizer.getBoundingClientRect().height;\n\t\t\tlineNumberSizer.innerHTML = '';\n\n\t\t\treturn {\n\t\t\t\telement: element,\n\t\t\t\tlines: codeLines,\n\t\t\t\tlineHeights: [],\n\t\t\t\toneLinerHeight: oneLinerHeight,\n\t\t\t\tsizer: lineNumberSizer,\n\t\t\t};\n\t\t}).filter(Boolean);\n\n\t\tinfos.forEach(function (info) {\n\t\t\tvar lineNumberSizer = info.sizer;\n\t\t\tvar lines = info.lines;\n\t\t\tvar lineHeights = info.lineHeights;\n\t\t\tvar oneLinerHeight = info.oneLinerHeight;\n\n\t\t\tlineHeights[lines.length - 1] = undefined;\n\t\t\tlines.forEach(function (line, index) {\n\t\t\t\tif (line && line.length > 1) {\n\t\t\t\t\tvar e = lineNumberSizer.appendChild(document.createElement('span'));\n\t\t\t\t\te.style.display = 'block';\n\t\t\t\t\te.textContent = line;\n\t\t\t\t} else {\n\t\t\t\t\tlineHeights[index] = oneLinerHeight;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tinfos.forEach(function (info) {\n\t\t\tvar lineNumberSizer = info.sizer;\n\t\t\tvar lineHeights = info.lineHeights;\n\n\t\t\tvar childIndex = 0;\n\t\t\tfor (var i = 0; i < lineHeights.length; i++) {\n\t\t\t\tif (lineHeights[i] === undefined) {\n\t\t\t\t\tlineHeights[i] = lineNumberSizer.children[childIndex++].getBoundingClientRect().height;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tinfos.forEach(function (info) {\n\t\t\tvar lineNumberSizer = info.sizer;\n\t\t\tvar wrapper = info.element.querySelector('.line-numbers-rows');\n\n\t\t\tlineNumberSizer.style.display = 'none';\n\t\t\tlineNumberSizer.innerHTML = '';\n\n\t\t\tinfo.lineHeights.forEach(function (height, lineNumber) {\n\t\t\t\twrapper.children[lineNumber].style.height = height + 'px';\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Returns style declarations for the element\n\t *\n\t * @param {Element} element\n\t */\n\tfunction getStyles(element) {\n\t\tif (!element) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn window.getComputedStyle ? getComputedStyle(element) : (element.currentStyle || null);\n\t}\n\n\tvar lastWidth = undefined;\n\twindow.addEventListener('resize', function () {\n\t\tif (config.assumeViewportIndependence && lastWidth === window.innerWidth) {\n\t\t\treturn;\n\t\t}\n\t\tlastWidth = window.innerWidth;\n\n\t\tresizeElements(Array.prototype.slice.call(document.querySelectorAll('pre.' + PLUGIN_NAME)));\n\t});\n\n\tPrism.hooks.add('complete', function (env) {\n\t\tif (!env.code) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar code = /** @type {Element} */ (env.element);\n\t\tvar pre = /** @type {HTMLElement} */ (code.parentNode);\n\n\t\t// works only for <code> wrapped inside <pre> (not inline)\n\t\tif (!pre || !/pre/i.test(pre.nodeName)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Abort if line numbers already exists\n\t\tif (code.querySelector('.line-numbers-rows')) {\n\t\t\treturn;\n\t\t}\n\n\t\t// only add line numbers if <code> or one of its ancestors has the `line-numbers` class\n\t\tif (!Prism.util.isActive(code, PLUGIN_NAME)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove the class 'line-numbers' from the <code>\n\t\tcode.classList.remove(PLUGIN_NAME);\n\t\t// Add the class 'line-numbers' to the <pre>\n\t\tpre.classList.add(PLUGIN_NAME);\n\n\t\tvar match = env.code.match(NEW_LINE_EXP);\n\t\tvar linesNum = match ? match.length + 1 : 1;\n\t\tvar lineNumbersWrapper;\n\n\t\tvar lines = new Array(linesNum + 1).join('<span></span>');\n\n\t\tlineNumbersWrapper = document.createElement('span');\n\t\tlineNumbersWrapper.setAttribute('aria-hidden', 'true');\n\t\tlineNumbersWrapper.className = 'line-numbers-rows';\n\t\tlineNumbersWrapper.innerHTML = lines;\n\n\t\tif (pre.hasAttribute('data-start')) {\n\t\t\tpre.style.counterReset = 'linenumber ' + (parseInt(pre.getAttribute('data-start'), 10) - 1);\n\t\t}\n\n\t\tenv.element.appendChild(lineNumbersWrapper);\n\n\t\tresizeElements([pre]);\n\n\t\tPrism.hooks.run('line-numbers', env);\n\t});\n\n\tPrism.hooks.add('line-numbers', function (env) {\n\t\tenv.plugins = env.plugins || {};\n\t\tenv.plugins.lineNumbers = true;\n\t});\n\n}());\n"],"sourceRoot":""}