{ "version": 3, "sources": ["../../../node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@rails/actioncable/src/index.js", "../../javascript/highlight.min.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../javascript/application.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../javascript/controllers/highlight_controller.js", "../../javascript/controllers/index.js"], "sourcesContent": ["export default {\n logger: self.console,\n WebSocket: self.WebSocket\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n// ActionCable.logger.enabled = true\n//\n// Example:\n//\n// import * as ActionCable from '@rails/actioncable'\n//\n// ActionCable.logger.enabled = true\n// ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n log(...messages) {\n if (this.enabled) {\n messages.push(Date.now())\n adapters.logger.log(\"[ActionCable]\", ...messages)\n }\n },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n constructor(connection) {\n this.visibilityDidChange = this.visibilityDidChange.bind(this)\n this.connection = connection\n this.reconnectAttempts = 0\n }\n\n start() {\n if (!this.isRunning()) {\n this.startedAt = now()\n delete this.stoppedAt\n this.startPolling()\n addEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n }\n }\n\n stop() {\n if (this.isRunning()) {\n this.stoppedAt = now()\n this.stopPolling()\n removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(\"ConnectionMonitor stopped\")\n }\n }\n\n isRunning() {\n return this.startedAt && !this.stoppedAt\n }\n\n recordPing() {\n this.pingedAt = now()\n }\n\n recordConnect() {\n this.reconnectAttempts = 0\n this.recordPing()\n delete this.disconnectedAt\n logger.log(\"ConnectionMonitor recorded connect\")\n }\n\n recordDisconnect() {\n this.disconnectedAt = now()\n logger.log(\"ConnectionMonitor recorded disconnect\")\n }\n\n // Private\n\n startPolling() {\n this.stopPolling()\n this.poll()\n }\n\n stopPolling() {\n clearTimeout(this.pollTimeout)\n }\n\n poll() {\n this.pollTimeout = setTimeout(() => {\n this.reconnectIfStale()\n this.poll()\n }\n , this.getPollInterval())\n }\n\n getPollInterval() {\n const { staleThreshold, reconnectionBackoffRate } = this.constructor\n const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n const jitter = jitterMax * Math.random()\n return staleThreshold * 1000 * backoff * (1 + jitter)\n }\n\n reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n this.reconnectAttempts++\n if (this.disconnectedRecently()) {\n logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n } else {\n logger.log(\"ConnectionMonitor reopening\")\n this.connection.reopen()\n }\n }\n }\n\n get refreshedAt() {\n return this.pingedAt ? this.pingedAt : this.startedAt\n }\n\n connectionIsStale() {\n return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n }\n\n disconnectedRecently() {\n return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n }\n\n visibilityDidChange() {\n if (document.visibilityState === \"visible\") {\n setTimeout(() => {\n if (this.connectionIsStale() || !this.connection.isOpen()) {\n logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n this.connection.reopen()\n }\n }\n , 200)\n }\n }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n \"message_types\": {\n \"welcome\": \"welcome\",\n \"disconnect\": \"disconnect\",\n \"ping\": \"ping\",\n \"confirmation\": \"confirm_subscription\",\n \"rejection\": \"reject_subscription\"\n },\n \"disconnect_reasons\": {\n \"unauthorized\": \"unauthorized\",\n \"invalid_request\": \"invalid_request\",\n \"server_restart\": \"server_restart\"\n },\n \"default_mount_path\": \"/cable\",\n \"protocols\": [\n \"actioncable-v1-json\",\n \"actioncable-unsupported\"\n ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n constructor(consumer) {\n this.open = this.open.bind(this)\n this.consumer = consumer\n this.subscriptions = this.consumer.subscriptions\n this.monitor = new ConnectionMonitor(this)\n this.disconnected = true\n }\n\n send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data))\n return true\n } else {\n return false\n }\n }\n\n open() {\n if (this.isActive()) {\n logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n return false\n } else {\n logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`)\n if (this.webSocket) { this.uninstallEventHandlers() }\n this.webSocket = new adapters.WebSocket(this.consumer.url, protocols)\n this.installEventHandlers()\n this.monitor.start()\n return true\n }\n }\n\n close({allowReconnect} = {allowReconnect: true}) {\n if (!allowReconnect) { this.monitor.stop() }\n // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n if (this.isOpen()) {\n return this.webSocket.close()\n }\n }\n\n reopen() {\n logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n if (this.isActive()) {\n try {\n return this.close()\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error)\n }\n finally {\n logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n setTimeout(this.open, this.constructor.reopenDelay)\n }\n } else {\n return this.open()\n }\n }\n\n getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol\n }\n }\n\n isOpen() {\n return this.isState(\"open\")\n }\n\n isActive() {\n return this.isState(\"open\", \"connecting\")\n }\n\n // Private\n\n isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n }\n\n isState(...states) {\n return indexOf.call(states, this.getState()) >= 0\n }\n\n getState() {\n if (this.webSocket) {\n for (let state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase()\n }\n }\n }\n return null\n }\n\n installEventHandlers() {\n for (let eventName in this.events) {\n const handler = this.events[eventName].bind(this)\n this.webSocket[`on${eventName}`] = handler\n }\n }\n\n uninstallEventHandlers() {\n for (let eventName in this.events) {\n this.webSocket[`on${eventName}`] = function() {}\n }\n }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n message(event) {\n if (!this.isProtocolSupported()) { return }\n const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n switch (type) {\n case message_types.welcome:\n this.monitor.recordConnect()\n return this.subscriptions.reload()\n case message_types.disconnect:\n logger.log(`Disconnecting. Reason: ${reason}`)\n return this.close({allowReconnect: reconnect})\n case message_types.ping:\n return this.monitor.recordPing()\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier)\n return this.subscriptions.notify(identifier, \"connected\")\n case message_types.rejection:\n return this.subscriptions.reject(identifier)\n default:\n return this.subscriptions.notify(identifier, \"received\", message)\n }\n },\n\n open() {\n logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n this.disconnected = false\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n return this.close({allowReconnect: false})\n }\n },\n\n close(event) {\n logger.log(\"WebSocket onclose event\")\n if (this.disconnected) { return }\n this.disconnected = true\n this.monitor.recordDisconnect()\n return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n },\n\n error() {\n logger.log(\"WebSocket onerror event\")\n }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n// connected() {\n// // Called once the subscription has been successfully completed\n// },\n//\n// disconnected({ willAttemptReconnect: boolean }) {\n// // Called when the client has disconnected with the server.\n// // The object will have an `willAttemptReconnect` property which\n// // says whether the client has the intention of attempting\n// // to reconnect.\n// },\n//\n// appear() {\n// this.perform('appear', {appearing_on: this.appearingOn()})\n// },\n//\n// away() {\n// this.perform('away')\n// },\n//\n// appearingOn() {\n// $('main').data('appearing-on')\n// }\n// })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n// class AppearanceChannel < ApplicationActionCable::Channel\n// def subscribed\n// current_user.appear\n// end\n//\n// def unsubscribed\n// current_user.disappear\n// end\n//\n// def appear(data)\n// current_user.appear on: data['appearing_on']\n// end\n//\n// def away\n// current_user.away\n// end\n// end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n if (properties != null) {\n for (let key in properties) {\n const value = properties[key]\n object[key] = value\n }\n }\n return object\n}\n\nexport default class Subscription {\n constructor(consumer, params = {}, mixin) {\n this.consumer = consumer\n this.identifier = JSON.stringify(params)\n extend(this, mixin)\n }\n\n // Perform a channel action with the optional data passed as an attribute\n perform(action, data = {}) {\n data.action = action\n return this.send(data)\n }\n\n send(data) {\n return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n }\n\n unsubscribe() {\n return this.consumer.subscriptions.remove(this)\n }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n constructor(subscriptions) {\n this.subscriptions = subscriptions\n this.pendingSubscriptions = []\n }\n\n guarantee(subscription) {\n if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n this.pendingSubscriptions.push(subscription) \n }\n else {\n logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n }\n this.startGuaranteeing()\n }\n\n forget(subscription) {\n logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n }\n\n startGuaranteeing() {\n this.stopGuaranteeing()\n this.retrySubscribing()\n }\n \n stopGuaranteeing() {\n clearTimeout(this.retryTimeout)\n }\n\n retrySubscribing() {\n this.retryTimeout = setTimeout(() => {\n if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n this.pendingSubscriptions.map((subscription) => {\n logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n this.subscriptions.subscribe(subscription)\n })\n }\n }\n , 500)\n }\n}\n\nexport default SubscriptionGuarantor", "import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n constructor(consumer) {\n this.consumer = consumer\n this.guarantor = new SubscriptionGuarantor(this)\n this.subscriptions = []\n }\n\n create(channelName, mixin) {\n const channel = channelName\n const params = typeof channel === \"object\" ? channel : {channel}\n const subscription = new Subscription(this.consumer, params, mixin)\n return this.add(subscription)\n }\n\n // Private\n\n add(subscription) {\n this.subscriptions.push(subscription)\n this.consumer.ensureActiveConnection()\n this.notify(subscription, \"initialized\")\n this.subscribe(subscription)\n return subscription\n }\n\n remove(subscription) {\n this.forget(subscription)\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\")\n }\n return subscription\n }\n\n reject(identifier) {\n return this.findAll(identifier).map((subscription) => {\n this.forget(subscription)\n this.notify(subscription, \"rejected\")\n return subscription\n })\n }\n\n forget(subscription) {\n this.guarantor.forget(subscription)\n this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n return subscription\n }\n\n findAll(identifier) {\n return this.subscriptions.filter((s) => s.identifier === identifier)\n }\n\n reload() {\n return this.subscriptions.map((subscription) =>\n this.subscribe(subscription))\n }\n\n notifyAll(callbackName, ...args) {\n return this.subscriptions.map((subscription) =>\n this.notify(subscription, callbackName, ...args))\n }\n\n notify(subscription, callbackName, ...args) {\n let subscriptions\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription)\n } else {\n subscriptions = [subscription]\n }\n\n return subscriptions.map((subscription) =>\n (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n }\n\n subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription)\n }\n }\n\n confirmSubscription(identifier) {\n logger.log(`Subscription confirmed ${identifier}`)\n this.findAll(identifier).map((subscription) =>\n this.guarantor.forget(subscription))\n }\n\n sendCommand(subscription, command) {\n const {identifier} = subscription\n return this.consumer.send({command, identifier})\n }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n// App.cable.disconnect()\n//\n// and to restart the connection:\n//\n// App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n constructor(url) {\n this._url = url\n this.subscriptions = new Subscriptions(this)\n this.connection = new Connection(this)\n }\n\n get url() {\n return createWebSocketURL(this._url)\n }\n\n send(data) {\n return this.connection.send(data)\n }\n\n connect() {\n return this.connection.open()\n }\n\n disconnect() {\n return this.connection.close({allowReconnect: false})\n }\n\n ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open()\n }\n }\n}\n\nexport function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url()\n }\n\n if (url && !/^wss?:/i.test(url)) {\n const a = document.createElement(\"a\")\n a.href = url\n // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n a.href = a.href\n a.protocol = a.protocol.replace(\"http\", \"ws\")\n return a.href\n } else {\n return url\n }\n}\n", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n Connection,\n ConnectionMonitor,\n Consumer,\n INTERNAL,\n Subscription,\n Subscriptions,\n SubscriptionGuarantor,\n adapters,\n createWebSocketURL,\n logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n return new Consumer(url)\n}\n\nexport function getConfig(name) {\n const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n if (element) {\n return element.getAttribute(\"content\")\n }\n}\n", "/*!\n Highlight.js v11.7.0 (git: 82688fad18)\n (c) 2006-2022 undefined and other contributors\n License: BSD-3-Clause\n */\nwindow.hljs=function(){\"use strict\";var e={exports:{}};function t(e){\nreturn e instanceof Map?e.clear=e.delete=e.set=()=>{\nthrow Error(\"map is read-only\")}:e instanceof Set&&(e.add=e.clear=e.delete=()=>{\nthrow Error(\"set is read-only\")\n}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((n=>{var i=e[n]\n;\"object\"!=typeof i||Object.isFrozen(i)||t(i)})),e}\ne.exports=t,e.exports.default=t;class n{constructor(e){\nvoid 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}\nignoreMatch(){this.isMatchIgnored=!0}}function i(e){\nreturn e.replace(/&/g,\"&\").replace(//g,\">\").replace(/\"/g,\""\").replace(/'/g,\"'\")\n}function r(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t]\n;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}\nconst s=e=>!!e.scope||e.sublanguage&&e.language;class o{constructor(e,t){\nthis.buffer=\"\",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){\nthis.buffer+=i(e)}openNode(e){if(!s(e))return;let t=\"\"\n;t=e.sublanguage?\"language-\"+e.language:((e,{prefix:t})=>{if(e.includes(\".\")){\nconst n=e.split(\".\")\n;return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${\"_\".repeat(t+1)}`))].join(\" \")\n}return`${t}${e}`})(e.scope,{prefix:this.classPrefix}),this.span(t)}\ncloseNode(e){s(e)&&(this.buffer+=\"\")}value(){return this.buffer}span(e){\nthis.buffer+=``}}const a=(e={})=>{const t={children:[]}\n;return Object.assign(t,e),t};class c{constructor(){\nthis.rootNode=a(),this.stack=[this.rootNode]}get top(){\nreturn this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){\nthis.top.children.push(e)}openNode(e){const t=a({scope:e})\n;this.add(t),this.stack.push(t)}closeNode(){\nif(this.stack.length>1)return this.stack.pop()}closeAllNodes(){\nfor(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}\nwalk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){\nreturn\"string\"==typeof t?e.addText(t):t.children&&(e.openNode(t),\nt.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){\n\"string\"!=typeof e&&e.children&&(e.children.every((e=>\"string\"==typeof e))?e.children=[e.children.join(\"\")]:e.children.forEach((e=>{\nc._collapse(e)})))}}class l extends c{constructor(e){super(),this.options=e}\naddKeyword(e,t){\"\"!==e&&(this.openNode(t),this.addText(e),this.closeNode())}\naddText(e){\"\"!==e&&this.add(e)}addSublanguage(e,t){const n=e.root\n;n.sublanguage=!0,n.language=t,this.add(n)}toHTML(){\nreturn new o(this,this.options).value()}finalize(){return!0}}function g(e){\nreturn e?\"string\"==typeof e?e:e.source:null}function d(e){return p(\"(?=\",e,\")\")}\nfunction u(e){return p(\"(?:\",e,\")*\")}function h(e){return p(\"(?:\",e,\")?\")}\nfunction p(...e){return e.map((e=>g(e))).join(\"\")}function f(...e){const t=(e=>{\nconst t=e[e.length-1]\n;return\"object\"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}\n})(e);return\"(\"+(t.capture?\"\":\"?:\")+e.map((e=>g(e))).join(\"|\")+\")\"}\nfunction b(e){return RegExp(e.toString()+\"|\").exec(\"\").length-1}\nconst m=/\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./\n;function E(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n\n;let i=g(e),r=\"\";for(;i.length>0;){const e=m.exec(i);if(!e){r+=i;break}\nr+=i.substring(0,e.index),\ni=i.substring(e.index+e[0].length),\"\\\\\"===e[0][0]&&e[1]?r+=\"\\\\\"+(Number(e[1])+t):(r+=e[0],\n\"(\"===e[0]&&n++)}return r})).map((e=>`(${e})`)).join(t)}\nconst x=\"[a-zA-Z]\\\\w*\",w=\"[a-zA-Z_]\\\\w*\",y=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",_=\"(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",O=\"\\\\b(0b[01]+)\",v={\nbegin:\"\\\\\\\\[\\\\s\\\\S]\",relevance:0},N={scope:\"string\",begin:\"'\",end:\"'\",\nillegal:\"\\\\n\",contains:[v]},k={scope:\"string\",begin:'\"',end:'\"',illegal:\"\\\\n\",\ncontains:[v]},M=(e,t,n={})=>{const i=r({scope:\"comment\",begin:e,end:t,\ncontains:[]},n);i.contains.push({scope:\"doctag\",\nbegin:\"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)\",\nend:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0})\n;const s=f(\"I\",\"a\",\"is\",\"so\",\"us\",\"to\",\"at\",\"if\",\"in\",\"it\",\"on\",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/)\n;return i.contains.push({begin:p(/[ ]+/,\"(\",s,/[.]?[:]?([.][ ]|[ ])/,\"){3}\")}),i\n},S=M(\"//\",\"$\"),R=M(\"/\\\\*\",\"\\\\*/\"),j=M(\"#\",\"$\");var A=Object.freeze({\n__proto__:null,MATCH_NOTHING_RE:/\\b\\B/,IDENT_RE:x,UNDERSCORE_IDENT_RE:w,\nNUMBER_RE:y,C_NUMBER_RE:_,BINARY_NUMBER_RE:O,\nRE_STARTERS_RE:\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",\nSHEBANG:(e={})=>{const t=/^#![ ]*\\//\n;return e.binary&&(e.begin=p(t,/.*\\b/,e.binary,/\\b.*/)),r({scope:\"meta\",begin:t,\nend:/$/,relevance:0,\"on:begin\":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},\nBACKSLASH_ESCAPE:v,APOS_STRING_MODE:N,QUOTE_STRING_MODE:k,PHRASAL_WORDS_MODE:{\nbegin:/\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n},COMMENT:M,C_LINE_COMMENT_MODE:S,C_BLOCK_COMMENT_MODE:R,HASH_COMMENT_MODE:j,\nNUMBER_MODE:{scope:\"number\",begin:y,relevance:0},C_NUMBER_MODE:{scope:\"number\",\nbegin:_,relevance:0},BINARY_NUMBER_MODE:{scope:\"number\",begin:O,relevance:0},\nREGEXP_MODE:{begin:/(?=\\/[^/\\n]*\\/)/,contains:[{scope:\"regexp\",begin:/\\//,\nend:/\\/[gimuy]*/,illegal:/\\n/,contains:[v,{begin:/\\[/,end:/\\]/,relevance:0,\ncontains:[v]}]}]},TITLE_MODE:{scope:\"title\",begin:x,relevance:0},\nUNDERSCORE_TITLE_MODE:{scope:\"title\",begin:w,relevance:0},METHOD_GUARD:{\nbegin:\"\\\\.\\\\s*[a-zA-Z_]\\\\w*\",relevance:0},END_SAME_AS_BEGIN:e=>Object.assign(e,{\n\"on:begin\":(e,t)=>{t.data._beginMatch=e[1]},\"on:end\":(e,t)=>{\nt.data._beginMatch!==e[1]&&t.ignoreMatch()}})});function I(e,t){\n\".\"===e.input[e.index-1]&&t.ignoreMatch()}function T(e,t){\nvoid 0!==e.className&&(e.scope=e.className,delete e.className)}function L(e,t){\nt&&e.beginKeywords&&(e.begin=\"\\\\b(\"+e.beginKeywords.split(\" \").join(\"|\")+\")(?!\\\\.)(?=\\\\b|\\\\s)\",\ne.__beforeBegin=I,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,\nvoid 0===e.relevance&&(e.relevance=0))}function B(e,t){\nArray.isArray(e.illegal)&&(e.illegal=f(...e.illegal))}function D(e,t){\nif(e.match){\nif(e.begin||e.end)throw Error(\"begin & end are not supported with match\")\n;e.begin=e.match,delete e.match}}function H(e,t){\nvoid 0===e.relevance&&(e.relevance=1)}const P=(e,t)=>{if(!e.beforeMatch)return\n;if(e.starts)throw Error(\"beforeMatch cannot be used with starts\")\n;const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t]\n})),e.keywords=n.keywords,e.begin=p(n.beforeMatch,d(n.begin)),e.starts={\nrelevance:0,contains:[Object.assign(n,{endsParent:!0})]\n},e.relevance=0,delete n.beforeMatch\n},C=[\"of\",\"and\",\"for\",\"in\",\"not\",\"or\",\"if\",\"then\",\"parent\",\"list\",\"value\"]\n;function $(e,t,n=\"keyword\"){const i=Object.create(null)\n;return\"string\"==typeof e?r(n,e.split(\" \")):Array.isArray(e)?r(n,e):Object.keys(e).forEach((n=>{\nObject.assign(i,$(e[n],t,n))})),i;function r(e,n){\nt&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split(\"|\")\n;i[n[0]]=[e,U(n[0],n[1])]}))}}function U(e,t){\nreturn t?Number(t):(e=>C.includes(e.toLowerCase()))(e)?0:1}const z={},K=e=>{\nconsole.error(e)},W=(e,...t)=>{console.log(\"WARN: \"+e,...t)},X=(e,t)=>{\nz[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),z[`${e}/${t}`]=!0)\n},G=Error();function Z(e,t,{key:n}){let i=0;const r=e[n],s={},o={}\n;for(let e=1;e<=t.length;e++)o[e+i]=r[e],s[e+i]=!0,i+=b(t[e-1])\n;e[n]=o,e[n]._emit=s,e[n]._multi=!0}function F(e){(e=>{\ne.scope&&\"object\"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,\ndelete e.scope)})(e),\"string\"==typeof e.beginScope&&(e.beginScope={\n_wrap:e.beginScope}),\"string\"==typeof e.endScope&&(e.endScope={_wrap:e.endScope\n}),(e=>{if(Array.isArray(e.begin)){\nif(e.skip||e.excludeBegin||e.returnBegin)throw K(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\"),\nG\n;if(\"object\"!=typeof e.beginScope||null===e.beginScope)throw K(\"beginScope must be object\"),\nG;Z(e,e.begin,{key:\"beginScope\"}),e.begin=E(e.begin,{joinWith:\"\"})}})(e),(e=>{\nif(Array.isArray(e.end)){\nif(e.skip||e.excludeEnd||e.returnEnd)throw K(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\"),\nG\n;if(\"object\"!=typeof e.endScope||null===e.endScope)throw K(\"endScope must be object\"),\nG;Z(e,e.end,{key:\"endScope\"}),e.end=E(e.end,{joinWith:\"\"})}})(e)}function V(e){\nfunction t(t,n){\nreturn RegExp(g(t),\"m\"+(e.case_insensitive?\"i\":\"\")+(e.unicodeRegex?\"u\":\"\")+(n?\"g\":\"\"))\n}class n{constructor(){\nthis.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}\naddRule(e,t){\nt.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),\nthis.matchAt+=b(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null)\n;const e=this.regexes.map((e=>e[1]));this.matcherRe=t(E(e,{joinWith:\"|\"\n}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex\n;const t=this.matcherRe.exec(e);if(!t)return null\n;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n]\n;return t.splice(0,n),Object.assign(t,i)}}class i{constructor(){\nthis.rules=[],this.multiRegexes=[],\nthis.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){\nif(this.multiRegexes[e])return this.multiRegexes[e];const t=new n\n;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),\nt.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){\nreturn 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){\nthis.rules.push([e,t]),\"begin\"===t.type&&this.count++}exec(e){\nconst t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex\n;let n=t.exec(e)\n;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{\nconst t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}\nreturn n&&(this.regexIndex+=n.position+1,\nthis.regexIndex===this.count&&this.considerAll()),n}}\nif(e.compilerExtensions||(e.compilerExtensions=[]),\ne.contains&&e.contains.includes(\"self\"))throw Error(\"ERR: contains `self` is not supported at the top-level of a language. See documentation.\")\n;return e.classNameAliases=r(e.classNameAliases||{}),function n(s,o){const a=s\n;if(s.isCompiled)return a\n;[T,D,F,P].forEach((e=>e(s,o))),e.compilerExtensions.forEach((e=>e(s,o))),\ns.__beforeBegin=null,[L,B,H].forEach((e=>e(s,o))),s.isCompiled=!0;let c=null\n;return\"object\"==typeof s.keywords&&s.keywords.$pattern&&(s.keywords=Object.assign({},s.keywords),\nc=s.keywords.$pattern,\ndelete s.keywords.$pattern),c=c||/\\w+/,s.keywords&&(s.keywords=$(s.keywords,e.case_insensitive)),\na.keywordPatternRe=t(c,!0),\no&&(s.begin||(s.begin=/\\B|\\b/),a.beginRe=t(a.begin),s.end||s.endsWithParent||(s.end=/\\B|\\b/),\ns.end&&(a.endRe=t(a.end)),\na.terminatorEnd=g(a.end)||\"\",s.endsWithParent&&o.terminatorEnd&&(a.terminatorEnd+=(s.end?\"|\":\"\")+o.terminatorEnd)),\ns.illegal&&(a.illegalRe=t(s.illegal)),\ns.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>r(e,{\nvariants:null},t)))),e.cachedVariants?e.cachedVariants:q(e)?r(e,{\nstarts:e.starts?r(e.starts):null\n}):Object.isFrozen(e)?r(e):e))(\"self\"===e?s:e)))),s.contains.forEach((e=>{n(e,a)\n})),s.starts&&n(s.starts,o),a.matcher=(e=>{const t=new i\n;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:\"begin\"\n}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:\"end\"\n}),e.illegal&&t.addRule(e.illegal,{type:\"illegal\"}),t})(a),a}(e)}function q(e){\nreturn!!e&&(e.endsWithParent||q(e.starts))}class J extends Error{\nconstructor(e,t){super(e),this.name=\"HTMLInjectionError\",this.html=t}}\nconst Y=i,Q=r,ee=Symbol(\"nomatch\");var te=(t=>{\nconst i=Object.create(null),r=Object.create(null),s=[];let o=!0\n;const a=\"Could not find the language '{}', did you forget to load/include a language module?\",c={\ndisableAutodetect:!0,name:\"Plain text\",contains:[]};let g={\nignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,\nlanguageDetectRe:/\\blang(?:uage)?-([\\w-]+)\\b/i,classPrefix:\"hljs-\",\ncssSelector:\"pre code\",languages:null,__emitter:l};function b(e){\nreturn g.noHighlightRe.test(e)}function m(e,t,n){let i=\"\",r=\"\"\n;\"object\"==typeof t?(i=e,\nn=t.ignoreIllegals,r=t.language):(X(\"10.7.0\",\"highlight(lang, code, ...args) has been deprecated.\"),\nX(\"10.7.0\",\"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\"),\nr=e,i=t),void 0===n&&(n=!0);const s={code:i,language:r};k(\"before:highlight\",s)\n;const o=s.result?s.result:E(s.language,s.code,n)\n;return o.code=s.code,k(\"after:highlight\",o),o}function E(e,t,r,s){\nconst c=Object.create(null);function l(){if(!N.keywords)return void M.addText(S)\n;let e=0;N.keywordPatternRe.lastIndex=0;let t=N.keywordPatternRe.exec(S),n=\"\"\n;for(;t;){n+=S.substring(e,t.index)\n;const r=y.case_insensitive?t[0].toLowerCase():t[0],s=(i=r,N.keywords[i]);if(s){\nconst[e,i]=s\n;if(M.addText(n),n=\"\",c[r]=(c[r]||0)+1,c[r]<=7&&(R+=i),e.startsWith(\"_\"))n+=t[0];else{\nconst n=y.classNameAliases[e]||e;M.addKeyword(t[0],n)}}else n+=t[0]\n;e=N.keywordPatternRe.lastIndex,t=N.keywordPatternRe.exec(S)}var i\n;n+=S.substring(e),M.addText(n)}function d(){null!=N.subLanguage?(()=>{\nif(\"\"===S)return;let e=null;if(\"string\"==typeof N.subLanguage){\nif(!i[N.subLanguage])return void M.addText(S)\n;e=E(N.subLanguage,S,!0,k[N.subLanguage]),k[N.subLanguage]=e._top\n}else e=x(S,N.subLanguage.length?N.subLanguage:null)\n;N.relevance>0&&(R+=e.relevance),M.addSublanguage(e._emitter,e.language)\n})():l(),S=\"\"}function u(e,t){let n=1;const i=t.length-1;for(;n<=i;){\nif(!e._emit[n]){n++;continue}const i=y.classNameAliases[e[n]]||e[n],r=t[n]\n;i?M.addKeyword(r,i):(S=r,l(),S=\"\"),n++}}function h(e,t){\nreturn e.scope&&\"string\"==typeof e.scope&&M.openNode(y.classNameAliases[e.scope]||e.scope),\ne.beginScope&&(e.beginScope._wrap?(M.addKeyword(S,y.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),\nS=\"\"):e.beginScope._multi&&(u(e.beginScope,t),S=\"\")),N=Object.create(e,{parent:{\nvalue:N}}),N}function p(e,t,i){let r=((e,t)=>{const n=e&&e.exec(t)\n;return n&&0===n.index})(e.endRe,i);if(r){if(e[\"on:end\"]){const i=new n(e)\n;e[\"on:end\"](t,i),i.isMatchIgnored&&(r=!1)}if(r){\nfor(;e.endsParent&&e.parent;)e=e.parent;return e}}\nif(e.endsWithParent)return p(e.parent,t,i)}function f(e){\nreturn 0===N.matcher.regexIndex?(S+=e[0],1):(I=!0,0)}function b(e){\nconst n=e[0],i=t.substring(e.index),r=p(N,e,i);if(!r)return ee;const s=N\n;N.endScope&&N.endScope._wrap?(d(),\nM.addKeyword(n,N.endScope._wrap)):N.endScope&&N.endScope._multi?(d(),\nu(N.endScope,e)):s.skip?S+=n:(s.returnEnd||s.excludeEnd||(S+=n),\nd(),s.excludeEnd&&(S=n));do{\nN.scope&&M.closeNode(),N.skip||N.subLanguage||(R+=N.relevance),N=N.parent\n}while(N!==r.parent);return r.starts&&h(r.starts,e),s.returnEnd?0:n.length}\nlet m={};function w(i,s){const a=s&&s[0];if(S+=i,null==a)return d(),0\n;if(\"begin\"===m.type&&\"end\"===s.type&&m.index===s.index&&\"\"===a){\nif(S+=t.slice(s.index,s.index+1),!o){const t=Error(`0 width match regex (${e})`)\n;throw t.languageName=e,t.badRule=m.rule,t}return 1}\nif(m=s,\"begin\"===s.type)return(e=>{\nconst t=e[0],i=e.rule,r=new n(i),s=[i.__beforeBegin,i[\"on:begin\"]]\n;for(const n of s)if(n&&(n(e,r),r.isMatchIgnored))return f(t)\n;return i.skip?S+=t:(i.excludeBegin&&(S+=t),\nd(),i.returnBegin||i.excludeBegin||(S=t)),h(i,e),i.returnBegin?0:t.length})(s)\n;if(\"illegal\"===s.type&&!r){\nconst e=Error('Illegal lexeme \"'+a+'\" for mode \"'+(N.scope||\"\")+'\"')\n;throw e.mode=N,e}if(\"end\"===s.type){const e=b(s);if(e!==ee)return e}\nif(\"illegal\"===s.type&&\"\"===a)return 1\n;if(A>1e5&&A>3*s.index)throw Error(\"potential infinite loop, way more iterations than matches\")\n;return S+=a,a.length}const y=O(e)\n;if(!y)throw K(a.replace(\"{}\",e)),Error('Unknown language: \"'+e+'\"')\n;const _=V(y);let v=\"\",N=s||_;const k={},M=new g.__emitter(g);(()=>{const e=[]\n;for(let t=N;t!==y;t=t.parent)t.scope&&e.unshift(t.scope)\n;e.forEach((e=>M.openNode(e)))})();let S=\"\",R=0,j=0,A=0,I=!1;try{\nfor(N.matcher.considerAll();;){\nA++,I?I=!1:N.matcher.considerAll(),N.matcher.lastIndex=j\n;const e=N.matcher.exec(t);if(!e)break;const n=w(t.substring(j,e.index),e)\n;j=e.index+n}\nreturn w(t.substring(j)),M.closeAllNodes(),M.finalize(),v=M.toHTML(),{\nlanguage:e,value:v,relevance:R,illegal:!1,_emitter:M,_top:N}}catch(n){\nif(n.message&&n.message.includes(\"Illegal\"))return{language:e,value:Y(t),\nillegal:!0,relevance:0,_illegalBy:{message:n.message,index:j,\ncontext:t.slice(j-100,j+100),mode:n.mode,resultSoFar:v},_emitter:M};if(o)return{\nlanguage:e,value:Y(t),illegal:!1,relevance:0,errorRaised:n,_emitter:M,_top:N}\n;throw n}}function x(e,t){t=t||g.languages||Object.keys(i);const n=(e=>{\nconst t={value:Y(e),illegal:!1,relevance:0,_top:c,_emitter:new g.__emitter(g)}\n;return t._emitter.addText(e),t})(e),r=t.filter(O).filter(N).map((t=>E(t,e,!1)))\n;r.unshift(n);const s=r.sort(((e,t)=>{\nif(e.relevance!==t.relevance)return t.relevance-e.relevance\n;if(e.language&&t.language){if(O(e.language).supersetOf===t.language)return 1\n;if(O(t.language).supersetOf===e.language)return-1}return 0})),[o,a]=s,l=o\n;return l.secondBest=a,l}function w(e){let t=null;const n=(e=>{\nlet t=e.className+\" \";t+=e.parentNode?e.parentNode.className:\"\"\n;const n=g.languageDetectRe.exec(t);if(n){const t=O(n[1])\n;return t||(W(a.replace(\"{}\",n[1])),\nW(\"Falling back to no-highlight mode for this block.\",e)),t?n[1]:\"no-highlight\"}\nreturn t.split(/\\s+/).find((e=>b(e)||O(e)))})(e);if(b(n))return\n;if(k(\"before:highlightElement\",{el:e,language:n\n}),e.children.length>0&&(g.ignoreUnescapedHTML||(console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\"),\nconsole.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\"),\nconsole.warn(\"The element with unescaped HTML:\"),\nconsole.warn(e)),g.throwUnescapedHTML))throw new J(\"One of your code blocks includes unescaped HTML.\",e.innerHTML)\n;t=e;const i=t.textContent,s=n?m(i,{language:n,ignoreIllegals:!0}):x(i)\n;e.innerHTML=s.value,((e,t,n)=>{const i=t&&r[t]||n\n;e.classList.add(\"hljs\"),e.classList.add(\"language-\"+i)\n})(e,n,s.language),e.result={language:s.language,re:s.relevance,\nrelevance:s.relevance},s.secondBest&&(e.secondBest={\nlanguage:s.secondBest.language,relevance:s.secondBest.relevance\n}),k(\"after:highlightElement\",{el:e,result:s,text:i})}let y=!1;function _(){\n\"loading\"!==document.readyState?document.querySelectorAll(g.cssSelector).forEach(w):y=!0\n}function O(e){return e=(e||\"\").toLowerCase(),i[e]||i[r[e]]}\nfunction v(e,{languageName:t}){\"string\"==typeof e&&(e=[e]),e.forEach((e=>{\nr[e.toLowerCase()]=t}))}function N(e){const t=O(e)\n;return t&&!t.disableAutodetect}function k(e,t){const n=e;s.forEach((e=>{\ne[n]&&e[n](t)}))}\n\"undefined\"!=typeof window&&window.addEventListener&&window.addEventListener(\"DOMContentLoaded\",(()=>{\ny&&_()}),!1),Object.assign(t,{highlight:m,highlightAuto:x,highlightAll:_,\nhighlightElement:w,\nhighlightBlock:e=>(X(\"10.7.0\",\"highlightBlock will be removed entirely in v12.0\"),\nX(\"10.7.0\",\"Please use highlightElement now.\"),w(e)),configure:e=>{g=Q(g,e)},\ninitHighlighting:()=>{\n_(),X(\"10.6.0\",\"initHighlighting() deprecated. Use highlightAll() now.\")},\ninitHighlightingOnLoad:()=>{\n_(),X(\"10.6.0\",\"initHighlightingOnLoad() deprecated. Use highlightAll() now.\")\n},registerLanguage:(e,n)=>{let r=null;try{r=n(t)}catch(t){\nif(K(\"Language definition for '{}' could not be registered.\".replace(\"{}\",e)),\n!o)throw t;K(t),r=c}\nr.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&v(r.aliases,{\nlanguageName:e})},unregisterLanguage:e=>{delete i[e]\n;for(const t of Object.keys(r))r[t]===e&&delete r[t]},\nlistLanguages:()=>Object.keys(i),getLanguage:O,registerAliases:v,\nautoDetection:N,inherit:Q,addPlugin:e=>{(e=>{\ne[\"before:highlightBlock\"]&&!e[\"before:highlightElement\"]&&(e[\"before:highlightElement\"]=t=>{\ne[\"before:highlightBlock\"](Object.assign({block:t.el},t))\n}),e[\"after:highlightBlock\"]&&!e[\"after:highlightElement\"]&&(e[\"after:highlightElement\"]=t=>{\ne[\"after:highlightBlock\"](Object.assign({block:t.el},t))})})(e),s.push(e)}\n}),t.debugMode=()=>{o=!1},t.safeMode=()=>{o=!0\n},t.versionString=\"11.7.0\",t.regex={concat:p,lookahead:d,either:f,optional:h,\nanyNumberOfTimes:u};for(const t in A)\"object\"==typeof A[t]&&e.exports(A[t])\n;return Object.assign(t,A),t})({});return te}()\n;\"object\"==typeof exports&&\"undefined\"!=typeof module&&(module.exports=hljs);/*! `go` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{const n={\nkeyword:[\"break\",\"case\",\"chan\",\"const\",\"continue\",\"default\",\"defer\",\"else\",\"fallthrough\",\"for\",\"func\",\"go\",\"goto\",\"if\",\"import\",\"interface\",\"map\",\"package\",\"range\",\"return\",\"select\",\"struct\",\"switch\",\"type\",\"var\"],\ntype:[\"bool\",\"byte\",\"complex64\",\"complex128\",\"error\",\"float32\",\"float64\",\"int8\",\"int16\",\"int32\",\"int64\",\"string\",\"uint8\",\"uint16\",\"uint32\",\"uint64\",\"int\",\"uint\",\"uintptr\",\"rune\"],\nliteral:[\"true\",\"false\",\"iota\",\"nil\"],\nbuilt_in:[\"append\",\"cap\",\"close\",\"complex\",\"copy\",\"imag\",\"len\",\"make\",\"new\",\"panic\",\"print\",\"println\",\"real\",\"recover\",\"delete\"]\n};return{name:\"Go\",aliases:[\"golang\"],keywords:n,illegal:\"{var e=(()=>{\"use strict\";return e=>{\nconst n=e.regex,t=/[dualxmsipngr]{0,12}/,r={$pattern:/[\\w.]+/,\nkeyword:\"abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0\"\n},s={className:\"subst\",begin:\"[$@]\\\\{\",end:\"\\\\}\",keywords:r},i={begin:/->\\{/,\nend:/\\}/},a={variants:[{begin:/\\$\\d/},{\nbegin:n.concat(/[$%@](\\^\\w\\b|#\\w+(::\\w+)*|\\{\\w+\\}|\\w+(::\\w*)*)/,\"(?![A-Za-z])(?![@$%])\")\n},{begin:/[$%@][^\\s\\w{]/,relevance:0}]\n},c=[e.BACKSLASH_ESCAPE,s,a],o=[/!/,/\\//,/\\|/,/\\?/,/'/,/\"/,/#/],g=(e,r,s=\"\\\\1\")=>{\nconst i=\"\\\\1\"===s?s:n.concat(s,r)\n;return n.concat(n.concat(\"(?:\",e,\")\"),r,/(?:\\\\.|[^\\\\\\/])*?/,i,/(?:\\\\.|[^\\\\\\/])*?/,s,t)\n},l=(e,r,s)=>n.concat(n.concat(\"(?:\",e,\")\"),r,/(?:\\\\.|[^\\\\\\/])*?/,s,t),d=[a,e.HASH_COMMENT_MODE,e.COMMENT(/^=\\w/,/=cut/,{\nendsWithParent:!0}),i,{className:\"string\",contains:c,variants:[{\nbegin:\"q[qwxr]?\\\\s*\\\\(\",end:\"\\\\)\",relevance:5},{begin:\"q[qwxr]?\\\\s*\\\\[\",\nend:\"\\\\]\",relevance:5},{begin:\"q[qwxr]?\\\\s*\\\\{\",end:\"\\\\}\",relevance:5},{\nbegin:\"q[qwxr]?\\\\s*\\\\|\",end:\"\\\\|\",relevance:5},{begin:\"q[qwxr]?\\\\s*<\",end:\">\",\nrelevance:5},{begin:\"qw\\\\s+q\",end:\"q\",relevance:5},{begin:\"'\",end:\"'\",\ncontains:[e.BACKSLASH_ESCAPE]},{begin:'\"',end:'\"'},{begin:\"`\",end:\"`\",\ncontains:[e.BACKSLASH_ESCAPE]},{begin:/\\{\\w+\\}/,relevance:0},{\nbegin:\"-?\\\\w+\\\\s*=>\",relevance:0}]},{className:\"number\",\nbegin:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",\nrelevance:0},{\nbegin:\"(\\\\/\\\\/|\"+e.RE_STARTERS_RE+\"|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*\",\nkeywords:\"split return print reverse grep\",relevance:0,\ncontains:[e.HASH_COMMENT_MODE,{className:\"regexp\",variants:[{\nbegin:g(\"s|tr|y\",n.either(...o,{capture:!0}))},{begin:g(\"s|tr|y\",\"\\\\(\",\"\\\\)\")},{\nbegin:g(\"s|tr|y\",\"\\\\[\",\"\\\\]\")},{begin:g(\"s|tr|y\",\"\\\\{\",\"\\\\}\")}],relevance:2},{\nclassName:\"regexp\",variants:[{begin:/(m|qr)\\/\\//,relevance:0},{\nbegin:l(\"(?:m|qr)?\",/\\//,/\\//)},{begin:l(\"m|qr\",n.either(...o,{capture:!0\n}),/\\1/)},{begin:l(\"m|qr\",/\\(/,/\\)/)},{begin:l(\"m|qr\",/\\[/,/\\]/)},{\nbegin:l(\"m|qr\",/\\{/,/\\}/)}]}]},{className:\"function\",beginKeywords:\"sub\",\nend:\"(\\\\s*\\\\(.*?\\\\))?[;{]\",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{\nbegin:\"-\\\\w\\\\b\",relevance:0},{begin:\"^__DATA__$\",end:\"^__END__$\",\nsubLanguage:\"mojolicious\",contains:[{begin:\"^@@.*\",end:\"$\",className:\"comment\"}]\n}];return s.contains=d,i.contains=d,{name:\"Perl\",aliases:[\"pl\",\"pm\"],keywords:r,\ncontains:d}}})();hljs.registerLanguage(\"perl\",e)})();/*! `css` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\"\n;const e=[\"a\",\"abbr\",\"address\",\"article\",\"aside\",\"audio\",\"b\",\"blockquote\",\"body\",\"button\",\"canvas\",\"caption\",\"cite\",\"code\",\"dd\",\"del\",\"details\",\"dfn\",\"div\",\"dl\",\"dt\",\"em\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"html\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"label\",\"legend\",\"li\",\"main\",\"mark\",\"menu\",\"nav\",\"object\",\"ol\",\"p\",\"q\",\"quote\",\"samp\",\"section\",\"span\",\"strong\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"ul\",\"var\",\"video\"],i=[\"any-hover\",\"any-pointer\",\"aspect-ratio\",\"color\",\"color-gamut\",\"color-index\",\"device-aspect-ratio\",\"device-height\",\"device-width\",\"display-mode\",\"forced-colors\",\"grid\",\"height\",\"hover\",\"inverted-colors\",\"monochrome\",\"orientation\",\"overflow-block\",\"overflow-inline\",\"pointer\",\"prefers-color-scheme\",\"prefers-contrast\",\"prefers-reduced-motion\",\"prefers-reduced-transparency\",\"resolution\",\"scan\",\"scripting\",\"update\",\"width\",\"min-width\",\"max-width\",\"min-height\",\"max-height\"],r=[\"active\",\"any-link\",\"blank\",\"checked\",\"current\",\"default\",\"defined\",\"dir\",\"disabled\",\"drop\",\"empty\",\"enabled\",\"first\",\"first-child\",\"first-of-type\",\"fullscreen\",\"future\",\"focus\",\"focus-visible\",\"focus-within\",\"has\",\"host\",\"host-context\",\"hover\",\"indeterminate\",\"in-range\",\"invalid\",\"is\",\"lang\",\"last-child\",\"last-of-type\",\"left\",\"link\",\"local-link\",\"not\",\"nth-child\",\"nth-col\",\"nth-last-child\",\"nth-last-col\",\"nth-last-of-type\",\"nth-of-type\",\"only-child\",\"only-of-type\",\"optional\",\"out-of-range\",\"past\",\"placeholder-shown\",\"read-only\",\"read-write\",\"required\",\"right\",\"root\",\"scope\",\"target\",\"target-within\",\"user-invalid\",\"valid\",\"visited\",\"where\"],t=[\"after\",\"backdrop\",\"before\",\"cue\",\"cue-region\",\"first-letter\",\"first-line\",\"grammar-error\",\"marker\",\"part\",\"placeholder\",\"selection\",\"slotted\",\"spelling-error\"],o=[\"align-content\",\"align-items\",\"align-self\",\"all\",\"animation\",\"animation-delay\",\"animation-direction\",\"animation-duration\",\"animation-fill-mode\",\"animation-iteration-count\",\"animation-name\",\"animation-play-state\",\"animation-timing-function\",\"backface-visibility\",\"background\",\"background-attachment\",\"background-blend-mode\",\"background-clip\",\"background-color\",\"background-image\",\"background-origin\",\"background-position\",\"background-repeat\",\"background-size\",\"block-size\",\"border\",\"border-block\",\"border-block-color\",\"border-block-end\",\"border-block-end-color\",\"border-block-end-style\",\"border-block-end-width\",\"border-block-start\",\"border-block-start-color\",\"border-block-start-style\",\"border-block-start-width\",\"border-block-style\",\"border-block-width\",\"border-bottom\",\"border-bottom-color\",\"border-bottom-left-radius\",\"border-bottom-right-radius\",\"border-bottom-style\",\"border-bottom-width\",\"border-collapse\",\"border-color\",\"border-image\",\"border-image-outset\",\"border-image-repeat\",\"border-image-slice\",\"border-image-source\",\"border-image-width\",\"border-inline\",\"border-inline-color\",\"border-inline-end\",\"border-inline-end-color\",\"border-inline-end-style\",\"border-inline-end-width\",\"border-inline-start\",\"border-inline-start-color\",\"border-inline-start-style\",\"border-inline-start-width\",\"border-inline-style\",\"border-inline-width\",\"border-left\",\"border-left-color\",\"border-left-style\",\"border-left-width\",\"border-radius\",\"border-right\",\"border-right-color\",\"border-right-style\",\"border-right-width\",\"border-spacing\",\"border-style\",\"border-top\",\"border-top-color\",\"border-top-left-radius\",\"border-top-right-radius\",\"border-top-style\",\"border-top-width\",\"border-width\",\"bottom\",\"box-decoration-break\",\"box-shadow\",\"box-sizing\",\"break-after\",\"break-before\",\"break-inside\",\"caption-side\",\"caret-color\",\"clear\",\"clip\",\"clip-path\",\"clip-rule\",\"color\",\"column-count\",\"column-fill\",\"column-gap\",\"column-rule\",\"column-rule-color\",\"column-rule-style\",\"column-rule-width\",\"column-span\",\"column-width\",\"columns\",\"contain\",\"content\",\"content-visibility\",\"counter-increment\",\"counter-reset\",\"cue\",\"cue-after\",\"cue-before\",\"cursor\",\"direction\",\"display\",\"empty-cells\",\"filter\",\"flex\",\"flex-basis\",\"flex-direction\",\"flex-flow\",\"flex-grow\",\"flex-shrink\",\"flex-wrap\",\"float\",\"flow\",\"font\",\"font-display\",\"font-family\",\"font-feature-settings\",\"font-kerning\",\"font-language-override\",\"font-size\",\"font-size-adjust\",\"font-smoothing\",\"font-stretch\",\"font-style\",\"font-synthesis\",\"font-variant\",\"font-variant-caps\",\"font-variant-east-asian\",\"font-variant-ligatures\",\"font-variant-numeric\",\"font-variant-position\",\"font-variation-settings\",\"font-weight\",\"gap\",\"glyph-orientation-vertical\",\"grid\",\"grid-area\",\"grid-auto-columns\",\"grid-auto-flow\",\"grid-auto-rows\",\"grid-column\",\"grid-column-end\",\"grid-column-start\",\"grid-gap\",\"grid-row\",\"grid-row-end\",\"grid-row-start\",\"grid-template\",\"grid-template-areas\",\"grid-template-columns\",\"grid-template-rows\",\"hanging-punctuation\",\"height\",\"hyphens\",\"icon\",\"image-orientation\",\"image-rendering\",\"image-resolution\",\"ime-mode\",\"inline-size\",\"isolation\",\"justify-content\",\"left\",\"letter-spacing\",\"line-break\",\"line-height\",\"list-style\",\"list-style-image\",\"list-style-position\",\"list-style-type\",\"margin\",\"margin-block\",\"margin-block-end\",\"margin-block-start\",\"margin-bottom\",\"margin-inline\",\"margin-inline-end\",\"margin-inline-start\",\"margin-left\",\"margin-right\",\"margin-top\",\"marks\",\"mask\",\"mask-border\",\"mask-border-mode\",\"mask-border-outset\",\"mask-border-repeat\",\"mask-border-slice\",\"mask-border-source\",\"mask-border-width\",\"mask-clip\",\"mask-composite\",\"mask-image\",\"mask-mode\",\"mask-origin\",\"mask-position\",\"mask-repeat\",\"mask-size\",\"mask-type\",\"max-block-size\",\"max-height\",\"max-inline-size\",\"max-width\",\"min-block-size\",\"min-height\",\"min-inline-size\",\"min-width\",\"mix-blend-mode\",\"nav-down\",\"nav-index\",\"nav-left\",\"nav-right\",\"nav-up\",\"none\",\"normal\",\"object-fit\",\"object-position\",\"opacity\",\"order\",\"orphans\",\"outline\",\"outline-color\",\"outline-offset\",\"outline-style\",\"outline-width\",\"overflow\",\"overflow-wrap\",\"overflow-x\",\"overflow-y\",\"padding\",\"padding-block\",\"padding-block-end\",\"padding-block-start\",\"padding-bottom\",\"padding-inline\",\"padding-inline-end\",\"padding-inline-start\",\"padding-left\",\"padding-right\",\"padding-top\",\"page-break-after\",\"page-break-before\",\"page-break-inside\",\"pause\",\"pause-after\",\"pause-before\",\"perspective\",\"perspective-origin\",\"pointer-events\",\"position\",\"quotes\",\"resize\",\"rest\",\"rest-after\",\"rest-before\",\"right\",\"row-gap\",\"scroll-margin\",\"scroll-margin-block\",\"scroll-margin-block-end\",\"scroll-margin-block-start\",\"scroll-margin-bottom\",\"scroll-margin-inline\",\"scroll-margin-inline-end\",\"scroll-margin-inline-start\",\"scroll-margin-left\",\"scroll-margin-right\",\"scroll-margin-top\",\"scroll-padding\",\"scroll-padding-block\",\"scroll-padding-block-end\",\"scroll-padding-block-start\",\"scroll-padding-bottom\",\"scroll-padding-inline\",\"scroll-padding-inline-end\",\"scroll-padding-inline-start\",\"scroll-padding-left\",\"scroll-padding-right\",\"scroll-padding-top\",\"scroll-snap-align\",\"scroll-snap-stop\",\"scroll-snap-type\",\"scrollbar-color\",\"scrollbar-gutter\",\"scrollbar-width\",\"shape-image-threshold\",\"shape-margin\",\"shape-outside\",\"speak\",\"speak-as\",\"src\",\"tab-size\",\"table-layout\",\"text-align\",\"text-align-all\",\"text-align-last\",\"text-combine-upright\",\"text-decoration\",\"text-decoration-color\",\"text-decoration-line\",\"text-decoration-style\",\"text-emphasis\",\"text-emphasis-color\",\"text-emphasis-position\",\"text-emphasis-style\",\"text-indent\",\"text-justify\",\"text-orientation\",\"text-overflow\",\"text-rendering\",\"text-shadow\",\"text-transform\",\"text-underline-position\",\"top\",\"transform\",\"transform-box\",\"transform-origin\",\"transform-style\",\"transition\",\"transition-delay\",\"transition-duration\",\"transition-property\",\"transition-timing-function\",\"unicode-bidi\",\"vertical-align\",\"visibility\",\"voice-balance\",\"voice-duration\",\"voice-family\",\"voice-pitch\",\"voice-range\",\"voice-rate\",\"voice-stress\",\"voice-volume\",\"white-space\",\"widows\",\"width\",\"will-change\",\"word-break\",\"word-spacing\",\"word-wrap\",\"writing-mode\",\"z-index\"].reverse()\n;return n=>{const a=n.regex,l=(e=>({IMPORTANT:{scope:\"meta\",begin:\"!important\"},\nBLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:\"number\",\nbegin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/},FUNCTION_DISPATCH:{\nclassName:\"built_in\",begin:/[\\w-]+(?=\\()/},ATTRIBUTE_SELECTOR_MODE:{\nscope:\"selector-attr\",begin:/\\[/,end:/\\]/,illegal:\"$\",\ncontains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{\nscope:\"number\",\nbegin:e.NUMBER_RE+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",\nrelevance:0},CSS_VARIABLE:{className:\"attr\",begin:/--[A-Za-z][A-Za-z0-9_-]*/}\n}))(n),s=[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE];return{name:\"CSS\",\ncase_insensitive:!0,illegal:/[=|'\\$]/,keywords:{keyframePosition:\"from to\"},\nclassNameAliases:{keyframePosition:\"selector-tag\"},contains:[l.BLOCK_COMMENT,{\nbegin:/-(webkit|moz|ms|o)-(?=[a-z])/},l.CSS_NUMBER_MODE,{\nclassName:\"selector-id\",begin:/#[A-Za-z0-9_-]+/,relevance:0},{\nclassName:\"selector-class\",begin:\"\\\\.[a-zA-Z-][a-zA-Z0-9_-]*\",relevance:0\n},l.ATTRIBUTE_SELECTOR_MODE,{className:\"selector-pseudo\",variants:[{\nbegin:\":(\"+r.join(\"|\")+\")\"},{begin:\":(:)?(\"+t.join(\"|\")+\")\"}]},l.CSS_VARIABLE,{\nclassName:\"attribute\",begin:\"\\\\b(\"+o.join(\"|\")+\")\\\\b\"},{begin:/:/,end:/[;}{]/,\ncontains:[l.BLOCK_COMMENT,l.HEXCOLOR,l.IMPORTANT,l.CSS_NUMBER_MODE,...s,{\nbegin:/(url|data-uri)\\(/,end:/\\)/,relevance:0,keywords:{built_in:\"url data-uri\"\n},contains:[...s,{className:\"string\",begin:/[^)]/,endsWithParent:!0,\nexcludeEnd:!0}]},l.FUNCTION_DISPATCH]},{begin:a.lookahead(/@/),end:\"[{;]\",\nrelevance:0,illegal:/:/,contains:[{className:\"keyword\",begin:/@-?\\w[\\w]*(-\\w+)*/\n},{begin:/\\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{\n$pattern:/[a-z-]+/,keyword:\"and or not only\",attribute:i.join(\" \")},contains:[{\nbegin:/[a-z-]+(?=:)/,className:\"attribute\"},...s,l.CSS_NUMBER_MODE]}]},{\nclassName:\"selector-tag\",begin:\"\\\\b(\"+e.join(\"|\")+\")\\\\b\"}]}}})()\n;hljs.registerLanguage(\"css\",e)})();/*! `xml` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{\nconst a=e.regex,n=a.concat(/[\\p{L}_]/u,a.optional(/[\\p{L}0-9_.-]*:/u),/[\\p{L}0-9_.-]*/u),s={\nclassName:\"symbol\",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},t={begin:/\\s/,\ncontains:[{className:\"keyword\",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\\n/}]\n},i=e.inherit(t,{begin:/\\(/,end:/\\)/}),c=e.inherit(e.APOS_STRING_MODE,{\nclassName:\"string\"}),l=e.inherit(e.QUOTE_STRING_MODE,{className:\"string\"}),r={\nendsWithParent:!0,illegal:/`]+/}]}]}]};return{\nname:\"HTML, XML\",\naliases:[\"html\",\"xhtml\",\"rss\",\"atom\",\"xjb\",\"xsd\",\"xsl\",\"plist\",\"wsf\",\"svg\"],\ncase_insensitive:!0,unicodeRegex:!0,contains:[{className:\"meta\",begin://,relevance:10,contains:[t,l,c,i,{begin:/\\[/,end:/\\]/,contains:[{\nclassName:\"meta\",begin://,contains:[t,i,l,c]}]}]\n},e.COMMENT(//,{relevance:10}),{begin://,\nrelevance:10},s,{className:\"meta\",end:/\\?>/,variants:[{begin:/<\\?xml/,\nrelevance:10,contains:[l]},{begin:/<\\?[a-z][a-z0-9]+/}]},{className:\"tag\",\nbegin:/)/,end:/>/,keywords:{name:\"style\"},contains:[r],starts:{\nend:/<\\/style>/,returnEnd:!0,subLanguage:[\"css\",\"xml\"]}},{className:\"tag\",\nbegin:/)/,end:/>/,keywords:{name:\"script\"},contains:[r],starts:{\nend:/<\\/script>/,returnEnd:!0,subLanguage:[\"javascript\",\"handlebars\",\"xml\"]}},{\nclassName:\"tag\",begin:/<>|<\\/>/},{className:\"tag\",\nbegin:a.concat(//,/>/,/\\s/)))),\nend:/\\/?>/,contains:[{className:\"name\",begin:n,relevance:0,starts:r}]},{\nclassName:\"tag\",begin:a.concat(/<\\//,a.lookahead(a.concat(n,/>/))),contains:[{\nclassName:\"name\",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}\n})();hljs.registerLanguage(\"xml\",e)})();/*! `php` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{\nconst t=e.regex,a=/(?![A-Za-z0-9])(?![$])/,r=t.concat(/[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/,a),n=t.concat(/(\\\\?[A-Z][a-z0-9_\\x7f-\\xff]+|\\\\?[A-Z]+(?=[A-Z][a-z0-9_\\x7f-\\xff])){1,}/,a),o={\nscope:\"variable\",match:\"\\\\$+\"+r},c={scope:\"subst\",variants:[{begin:/\\$\\w+/},{\nbegin:/\\{\\$/,end:/\\}/}]},i=e.inherit(e.APOS_STRING_MODE,{illegal:null\n}),s=\"[ \\t\\n]\",l={scope:\"string\",variants:[e.inherit(e.QUOTE_STRING_MODE,{\nillegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(c)\n}),i,e.END_SAME_AS_BEGIN({begin:/<<<[ \\t]*(\\w+)\\n/,end:/[ \\t]*(\\w+)\\b/,\ncontains:e.QUOTE_STRING_MODE.contains.concat(c)})]},_={scope:\"number\",\nvariants:[{begin:\"\\\\b0[bB][01]+(?:_[01]+)*\\\\b\"},{\nbegin:\"\\\\b0[oO][0-7]+(?:_[0-7]+)*\\\\b\"},{\nbegin:\"\\\\b0[xX][\\\\da-fA-F]+(?:_[\\\\da-fA-F]+)*\\\\b\"},{\nbegin:\"(?:\\\\b\\\\d+(?:_\\\\d+)*(\\\\.(?:\\\\d+(?:_\\\\d+)*))?|\\\\B\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?\"\n}],relevance:0\n},d=[\"false\",\"null\",\"true\"],p=[\"__CLASS__\",\"__DIR__\",\"__FILE__\",\"__FUNCTION__\",\"__COMPILER_HALT_OFFSET__\",\"__LINE__\",\"__METHOD__\",\"__NAMESPACE__\",\"__TRAIT__\",\"die\",\"echo\",\"exit\",\"include\",\"include_once\",\"print\",\"require\",\"require_once\",\"array\",\"abstract\",\"and\",\"as\",\"binary\",\"bool\",\"boolean\",\"break\",\"callable\",\"case\",\"catch\",\"class\",\"clone\",\"const\",\"continue\",\"declare\",\"default\",\"do\",\"double\",\"else\",\"elseif\",\"empty\",\"enddeclare\",\"endfor\",\"endforeach\",\"endif\",\"endswitch\",\"endwhile\",\"enum\",\"eval\",\"extends\",\"final\",\"finally\",\"float\",\"for\",\"foreach\",\"from\",\"global\",\"goto\",\"if\",\"implements\",\"instanceof\",\"insteadof\",\"int\",\"integer\",\"interface\",\"isset\",\"iterable\",\"list\",\"match|0\",\"mixed\",\"new\",\"never\",\"object\",\"or\",\"private\",\"protected\",\"public\",\"readonly\",\"real\",\"return\",\"string\",\"switch\",\"throw\",\"trait\",\"try\",\"unset\",\"use\",\"var\",\"void\",\"while\",\"xor\",\"yield\"],b=[\"Error|0\",\"AppendIterator\",\"ArgumentCountError\",\"ArithmeticError\",\"ArrayIterator\",\"ArrayObject\",\"AssertionError\",\"BadFunctionCallException\",\"BadMethodCallException\",\"CachingIterator\",\"CallbackFilterIterator\",\"CompileError\",\"Countable\",\"DirectoryIterator\",\"DivisionByZeroError\",\"DomainException\",\"EmptyIterator\",\"ErrorException\",\"Exception\",\"FilesystemIterator\",\"FilterIterator\",\"GlobIterator\",\"InfiniteIterator\",\"InvalidArgumentException\",\"IteratorIterator\",\"LengthException\",\"LimitIterator\",\"LogicException\",\"MultipleIterator\",\"NoRewindIterator\",\"OutOfBoundsException\",\"OutOfRangeException\",\"OuterIterator\",\"OverflowException\",\"ParentIterator\",\"ParseError\",\"RangeException\",\"RecursiveArrayIterator\",\"RecursiveCachingIterator\",\"RecursiveCallbackFilterIterator\",\"RecursiveDirectoryIterator\",\"RecursiveFilterIterator\",\"RecursiveIterator\",\"RecursiveIteratorIterator\",\"RecursiveRegexIterator\",\"RecursiveTreeIterator\",\"RegexIterator\",\"RuntimeException\",\"SeekableIterator\",\"SplDoublyLinkedList\",\"SplFileInfo\",\"SplFileObject\",\"SplFixedArray\",\"SplHeap\",\"SplMaxHeap\",\"SplMinHeap\",\"SplObjectStorage\",\"SplObserver\",\"SplPriorityQueue\",\"SplQueue\",\"SplStack\",\"SplSubject\",\"SplTempFileObject\",\"TypeError\",\"UnderflowException\",\"UnexpectedValueException\",\"UnhandledMatchError\",\"ArrayAccess\",\"BackedEnum\",\"Closure\",\"Fiber\",\"Generator\",\"Iterator\",\"IteratorAggregate\",\"Serializable\",\"Stringable\",\"Throwable\",\"Traversable\",\"UnitEnum\",\"WeakReference\",\"WeakMap\",\"Directory\",\"__PHP_Incomplete_Class\",\"parent\",\"php_user_filter\",\"self\",\"static\",\"stdClass\"],E={\nkeyword:p,literal:(e=>{const t=[];return e.forEach((e=>{\nt.push(e),e.toLowerCase()===e?t.push(e.toUpperCase()):t.push(e.toLowerCase())\n})),t})(d),built_in:b},u=e=>e.map((e=>e.replace(/\\|\\d+$/,\"\"))),g={variants:[{\nmatch:[/new/,t.concat(s,\"+\"),t.concat(\"(?!\",u(b).join(\"\\\\b|\"),\"\\\\b)\"),n],scope:{\n1:\"keyword\",4:\"title.class\"}}]},h=t.concat(r,\"\\\\b(?!\\\\()\"),m={variants:[{\nmatch:[t.concat(/::/,t.lookahead(/(?!class\\b)/)),h],scope:{2:\"variable.constant\"\n}},{match:[/::/,/class/],scope:{2:\"variable.language\"}},{\nmatch:[n,t.concat(/::/,t.lookahead(/(?!class\\b)/)),h],scope:{1:\"title.class\",\n3:\"variable.constant\"}},{match:[n,t.concat(\"::\",t.lookahead(/(?!class\\b)/))],\nscope:{1:\"title.class\"}},{match:[n,/::/,/class/],scope:{1:\"title.class\",\n3:\"variable.language\"}}]},I={scope:\"attr\",\nmatch:t.concat(r,t.lookahead(\":\"),t.lookahead(/(?!::)/))},f={relevance:0,\nbegin:/\\(/,end:/\\)/,keywords:E,contains:[I,o,m,e.C_BLOCK_COMMENT_MODE,l,_,g]\n},O={relevance:0,\nmatch:[/\\b/,t.concat(\"(?!fn\\\\b|function\\\\b|\",u(p).join(\"\\\\b|\"),\"|\",u(b).join(\"\\\\b|\"),\"\\\\b)\"),r,t.concat(s,\"*\"),t.lookahead(/(?=\\()/)],\nscope:{3:\"title.function.invoke\"},contains:[f]};f.contains.push(O)\n;const v=[I,m,e.C_BLOCK_COMMENT_MODE,l,_,g];return{case_insensitive:!1,\nkeywords:E,contains:[{begin:t.concat(/#\\[\\s*/,n),beginScope:\"meta\",end:/]/,\nendScope:\"meta\",keywords:{literal:d,keyword:[\"new\",\"array\"]},contains:[{\nbegin:/\\[/,end:/]/,keywords:{literal:d,keyword:[\"new\",\"array\"]},\ncontains:[\"self\",...v]},...v,{scope:\"meta\",match:n}]\n},e.HASH_COMMENT_MODE,e.COMMENT(\"//\",\"$\"),e.COMMENT(\"/\\\\*\",\"\\\\*/\",{contains:[{\nscope:\"doctag\",match:\"@[A-Za-z]+\"}]}),{match:/__halt_compiler\\(\\);/,\nkeywords:\"__halt_compiler\",starts:{scope:\"comment\",end:e.MATCH_NOTHING_RE,\ncontains:[{match:/\\?>/,scope:\"meta\",endsParent:!0}]}},{scope:\"meta\",variants:[{\nbegin:/<\\?php/,relevance:10},{begin:/<\\?=/},{begin:/<\\?/,relevance:.1},{\nbegin:/\\?>/}]},{scope:\"variable.language\",match:/\\$this\\b/},o,O,m,{\nmatch:[/const/,/\\s/,r],scope:{1:\"keyword\",3:\"variable.constant\"}},g,{\nscope:\"function\",relevance:0,beginKeywords:\"fn function\",end:/[;{]/,\nexcludeEnd:!0,illegal:\"[$%\\\\[]\",contains:[{beginKeywords:\"use\"\n},e.UNDERSCORE_TITLE_MODE,{begin:\"=>\",endsParent:!0},{scope:\"params\",\nbegin:\"\\\\(\",end:\"\\\\)\",excludeBegin:!0,excludeEnd:!0,keywords:E,\ncontains:[\"self\",o,m,e.C_BLOCK_COMMENT_MODE,l,_]}]},{scope:\"class\",variants:[{\nbeginKeywords:\"enum\",illegal:/[($\"]/},{beginKeywords:\"class interface trait\",\nillegal:/[:($\"]/}],relevance:0,end:/\\{/,excludeEnd:!0,contains:[{\nbeginKeywords:\"extends implements\"},e.UNDERSCORE_TITLE_MODE]},{\nbeginKeywords:\"namespace\",relevance:0,end:\";\",illegal:/[.']/,\ncontains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:\"title.class\"})]},{\nbeginKeywords:\"use\",relevance:0,end:\";\",contains:[{\nmatch:/\\b(as|const|function)\\b/,scope:\"keyword\"},e.UNDERSCORE_TITLE_MODE]},l,_]}\n}})();hljs.registerLanguage(\"php\",e)})();/*! `php-template` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var n=(()=>{\"use strict\";return n=>({name:\"PHP template\",\nsubLanguage:\"xml\",contains:[{begin:/<\\?(php|=)?/,end:/\\?>/,subLanguage:\"php\",\ncontains:[{begin:\"/\\\\*\",end:\"\\\\*/\",skip:!0},{begin:'b\"',end:'\"',skip:!0},{\nbegin:\"b'\",end:\"'\",skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null,\nclassName:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{\nillegal:null,className:null,contains:null,skip:!0})]}]})})()\n;hljs.registerLanguage(\"php-template\",n)})();/*! `ruby` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{\nconst n=e.regex,a=\"([a-zA-Z_]\\\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?)\",s=n.either(/\\b([A-Z]+[a-z0-9]+)+/,/\\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(s,/(::\\w+)*/),t={\n\"variable.constant\":[\"__FILE__\",\"__LINE__\",\"__ENCODING__\"],\n\"variable.language\":[\"self\",\"super\"],\nkeyword:[\"alias\",\"and\",\"begin\",\"BEGIN\",\"break\",\"case\",\"class\",\"defined\",\"do\",\"else\",\"elsif\",\"end\",\"END\",\"ensure\",\"for\",\"if\",\"in\",\"module\",\"next\",\"not\",\"or\",\"redo\",\"require\",\"rescue\",\"retry\",\"return\",\"then\",\"undef\",\"unless\",\"until\",\"when\",\"while\",\"yield\",\"include\",\"extend\",\"prepend\",\"public\",\"private\",\"protected\",\"raise\",\"throw\"],\nbuilt_in:[\"proc\",\"lambda\",\"attr_accessor\",\"attr_reader\",\"attr_writer\",\"define_method\",\"private_constant\",\"module_function\"],\nliteral:[\"true\",\"false\",\"nil\"]},c={className:\"doctag\",begin:\"@[A-Za-z]+\"},r={\nbegin:\"#<\",end:\">\"},b=[e.COMMENT(\"#\",\"$\",{contains:[c]\n}),e.COMMENT(\"^=begin\",\"^=end\",{contains:[c],relevance:10\n}),e.COMMENT(\"^__END__\",e.MATCH_NOTHING_RE)],l={className:\"subst\",begin:/#\\{/,\nend:/\\}/,keywords:t},d={className:\"string\",contains:[e.BACKSLASH_ESCAPE,l],\nvariants:[{begin:/'/,end:/'/},{begin:/\"/,end:/\"/},{begin:/`/,end:/`/},{\nbegin:/%[qQwWx]?\\(/,end:/\\)/},{begin:/%[qQwWx]?\\[/,end:/\\]/},{\nbegin:/%[qQwWx]?\\{/,end:/\\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\\//,\nend:/\\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{\nbegin:/%[qQwWx]?\\|/,end:/\\|/},{begin:/\\B\\?(\\\\\\d{1,3})/},{\nbegin:/\\B\\?(\\\\x[A-Fa-f0-9]{1,2})/},{begin:/\\B\\?(\\\\u\\{?[A-Fa-f0-9]{1,6}\\}?)/},{\nbegin:/\\B\\?(\\\\M-\\\\C-|\\\\M-\\\\c|\\\\c\\\\M-|\\\\M-|\\\\C-\\\\M-)[\\x20-\\x7e]/},{\nbegin:/\\B\\?\\\\(c|C-)[\\x20-\\x7e]/},{begin:/\\B\\?\\\\?\\S/},{\nbegin:n.concat(/<<[-~]?'?/,n.lookahead(/(\\w+)(?=\\W)[^\\n]*\\n(?:[^\\n]*\\n)*?\\s*\\1\\b/)),\ncontains:[e.END_SAME_AS_BEGIN({begin:/(\\w+)/,end:/(\\w+)/,\ncontains:[e.BACKSLASH_ESCAPE,l]})]}]},o=\"[0-9](_?[0-9])*\",g={className:\"number\",\nrelevance:0,variants:[{\nbegin:`\\\\b([1-9](_?[0-9])*|0)(\\\\.(${o}))?([eE][+-]?(${o})|r)?i?\\\\b`},{\nbegin:\"\\\\b0[dD][0-9](_?[0-9])*r?i?\\\\b\"},{begin:\"\\\\b0[bB][0-1](_?[0-1])*r?i?\\\\b\"\n},{begin:\"\\\\b0[oO][0-7](_?[0-7])*r?i?\\\\b\"},{\nbegin:\"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\\\b\"},{\nbegin:\"\\\\b0(_?[0-7])+r?i?\\\\b\"}]},_={variants:[{match:/\\(\\)/},{\nclassName:\"params\",begin:/\\(/,end:/(?=\\))/,excludeBegin:!0,endsParent:!0,\nkeywords:t}]},u=[d,{variants:[{match:[/class\\s+/,i,/\\s+<\\s+/,i]},{\nmatch:[/\\b(class|module)\\s+/,i]}],scope:{2:\"title.class\",\n4:\"title.class.inherited\"},keywords:t},{match:[/(include|extend)\\s+/,i],scope:{\n2:\"title.class\"},keywords:t},{relevance:0,match:[i,/\\.new[. (]/],scope:{\n1:\"title.class\"}},{relevance:0,match:/\\b[A-Z][A-Z_0-9]+\\b/,\nclassName:\"variable.constant\"},{relevance:0,match:s,scope:\"title.class\"},{\nmatch:[/def/,/\\s+/,a],scope:{1:\"keyword\",3:\"title.function\"},contains:[_]},{\nbegin:e.IDENT_RE+\"::\"},{className:\"symbol\",\nbegin:e.UNDERSCORE_IDENT_RE+\"(!|\\\\?)?:\",relevance:0},{className:\"symbol\",\nbegin:\":(?!\\\\s)\",contains:[d,{begin:a}],relevance:0},g,{className:\"variable\",\nbegin:\"(\\\\$\\\\W)|((\\\\$|@@?)(\\\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])\"},{\nclassName:\"params\",begin:/\\|/,end:/\\|/,excludeBegin:!0,excludeEnd:!0,\nrelevance:0,keywords:t},{begin:\"(\"+e.RE_STARTERS_RE+\"|unless)\\\\s*\",\nkeywords:\"unless\",contains:[{className:\"regexp\",contains:[e.BACKSLASH_ESCAPE,l],\nillegal:/\\n/,variants:[{begin:\"/\",end:\"/[a-z]*\"},{begin:/%r\\{/,end:/\\}[a-z]*/},{\nbegin:\"%r\\\\(\",end:\"\\\\)[a-z]*\"},{begin:\"%r!\",end:\"![a-z]*\"},{begin:\"%r\\\\[\",\nend:\"\\\\][a-z]*\"}]}].concat(r,b),relevance:0}].concat(r,b)\n;l.contains=u,_.contains=u;const m=[{begin:/^\\s*=>/,starts:{end:\"$\",contains:u}\n},{className:\"meta.prompt\",\nbegin:\"^([>?]>|[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+[>*]|(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d+(p\\\\d+)?[^\\\\d][^>]+>)(?=[ ])\",\nstarts:{end:\"$\",keywords:t,contains:u}}];return b.unshift(r),{name:\"Ruby\",\naliases:[\"rb\",\"gemspec\",\"podspec\",\"thor\",\"irb\"],keywords:t,illegal:/\\/\\*/,\ncontains:[e.SHEBANG({binary:\"ruby\"})].concat(m).concat(b).concat(u)}}})()\n;hljs.registerLanguage(\"ruby\",e)})();/*! `erb` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>({name:\"ERB\",subLanguage:\"xml\",\ncontains:[e.COMMENT(\"<%#\",\"%>\"),{begin:\"<%[%=-]?\",end:\"[%-]?%>\",\nsubLanguage:\"ruby\",excludeBegin:!0,excludeEnd:!0}]})})()\n;hljs.registerLanguage(\"erb\",e)})();/*! `rust` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{const t=e.regex,a={\nclassName:\"title.function.invoke\",relevance:0,\nbegin:t.concat(/\\b/,/(?!let\\b)/,e.IDENT_RE,t.lookahead(/\\s*\\(/))\n},n=\"([ui](8|16|32|64|128|size)|f(32|64))?\",s=[\"drop \",\"Copy\",\"Send\",\"Sized\",\"Sync\",\"Drop\",\"Fn\",\"FnMut\",\"FnOnce\",\"ToOwned\",\"Clone\",\"Debug\",\"PartialEq\",\"PartialOrd\",\"Eq\",\"Ord\",\"AsRef\",\"AsMut\",\"Into\",\"From\",\"Default\",\"Iterator\",\"Extend\",\"IntoIterator\",\"DoubleEndedIterator\",\"ExactSizeIterator\",\"SliceConcatExt\",\"ToString\",\"assert!\",\"assert_eq!\",\"bitflags!\",\"bytes!\",\"cfg!\",\"col!\",\"concat!\",\"concat_idents!\",\"debug_assert!\",\"debug_assert_eq!\",\"env!\",\"panic!\",\"file!\",\"format!\",\"format_args!\",\"include_bytes!\",\"include_str!\",\"line!\",\"local_data_key!\",\"module_path!\",\"option_env!\",\"print!\",\"println!\",\"select!\",\"stringify!\",\"try!\",\"unimplemented!\",\"unreachable!\",\"vec!\",\"write!\",\"writeln!\",\"macro_rules!\",\"assert_ne!\",\"debug_assert_ne!\"],r=[\"i8\",\"i16\",\"i32\",\"i64\",\"i128\",\"isize\",\"u8\",\"u16\",\"u32\",\"u64\",\"u128\",\"usize\",\"f32\",\"f64\",\"str\",\"char\",\"bool\",\"Box\",\"Option\",\"Result\",\"String\",\"Vec\"]\n;return{name:\"Rust\",aliases:[\"rs\"],keywords:{$pattern:e.IDENT_RE+\"!?\",type:r,\nkeyword:[\"abstract\",\"as\",\"async\",\"await\",\"become\",\"box\",\"break\",\"const\",\"continue\",\"crate\",\"do\",\"dyn\",\"else\",\"enum\",\"extern\",\"false\",\"final\",\"fn\",\"for\",\"if\",\"impl\",\"in\",\"let\",\"loop\",\"macro\",\"match\",\"mod\",\"move\",\"mut\",\"override\",\"priv\",\"pub\",\"ref\",\"return\",\"self\",\"Self\",\"static\",\"struct\",\"super\",\"trait\",\"true\",\"try\",\"type\",\"typeof\",\"unsafe\",\"unsized\",\"use\",\"virtual\",\"where\",\"while\",\"yield\"],\nliteral:[\"true\",\"false\",\"Some\",\"None\",\"Ok\",\"Err\"],built_in:s},illegal:\"\"},a]}}})()\n;hljs.registerLanguage(\"rust\",e)})();/*! `graphql` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{const a=e.regex;return{name:\"GraphQL\",\naliases:[\"gql\"],case_insensitive:!0,disableAutodetect:!1,keywords:{\nkeyword:[\"query\",\"mutation\",\"subscription\",\"type\",\"input\",\"schema\",\"directive\",\"interface\",\"union\",\"scalar\",\"fragment\",\"enum\",\"on\"],\nliteral:[\"true\",\"false\",\"null\"]},\ncontains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{\nscope:\"punctuation\",match:/[.]{3}/,relevance:0},{scope:\"punctuation\",\nbegin:/[\\!\\(\\)\\:\\=\\[\\]\\{\\|\\}]{1}/,relevance:0},{scope:\"variable\",begin:/\\$/,\nend:/\\W/,excludeEnd:!0,relevance:0},{scope:\"meta\",match:/@\\w+/,excludeEnd:!0},{\nscope:\"symbol\",begin:a.concat(/[_A-Za-z][_0-9A-Za-z]*/,a.lookahead(/\\s*:/)),\nrelevance:0}],illegal:[/[;<']/,/BEGIN/]}}})();hljs.registerLanguage(\"graphql\",e)\n})();/*! `bash` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{const s=e.regex,t={},n={begin:/\\$\\{/,\nend:/\\}/,contains:[\"self\",{begin:/:-/,contains:[t]}]};Object.assign(t,{\nclassName:\"variable\",variants:[{\nbegin:s.concat(/\\$[\\w\\d#@][\\w\\d_]*/,\"(?![\\\\w\\\\d])(?![$])\")},n]});const a={\nclassName:\"subst\",begin:/\\$\\(/,end:/\\)/,contains:[e.BACKSLASH_ESCAPE]},i={\nbegin:/<<-?\\s*(?=\\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\\w+)/,\nend:/(\\w+)/,className:\"string\"})]}},c={className:\"string\",begin:/\"/,end:/\"/,\ncontains:[e.BACKSLASH_ESCAPE,t,a]};a.contains.push(c);const o={begin:/\\$?\\(\\(/,\nend:/\\)\\)/,contains:[{begin:/\\d+#[0-9a-f]+/,className:\"number\"},e.NUMBER_MODE,t]\n},r=e.SHEBANG({binary:\"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)\",relevance:10\n}),l={className:\"function\",begin:/\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,returnBegin:!0,\ncontains:[e.inherit(e.TITLE_MODE,{begin:/\\w[\\w\\d_]*/})],relevance:0};return{\nname:\"Bash\",aliases:[\"sh\"],keywords:{$pattern:/\\b[a-z][a-z0-9._-]+\\b/,\nkeyword:[\"if\",\"then\",\"else\",\"elif\",\"fi\",\"for\",\"while\",\"in\",\"do\",\"done\",\"case\",\"esac\",\"function\"],\nliteral:[\"true\",\"false\"],\nbuilt_in:[\"break\",\"cd\",\"continue\",\"eval\",\"exec\",\"exit\",\"export\",\"getopts\",\"hash\",\"pwd\",\"readonly\",\"return\",\"shift\",\"test\",\"times\",\"trap\",\"umask\",\"unset\",\"alias\",\"bind\",\"builtin\",\"caller\",\"command\",\"declare\",\"echo\",\"enable\",\"help\",\"let\",\"local\",\"logout\",\"mapfile\",\"printf\",\"read\",\"readarray\",\"source\",\"type\",\"typeset\",\"ulimit\",\"unalias\",\"set\",\"shopt\",\"autoload\",\"bg\",\"bindkey\",\"bye\",\"cap\",\"chdir\",\"clone\",\"comparguments\",\"compcall\",\"compctl\",\"compdescribe\",\"compfiles\",\"compgroups\",\"compquote\",\"comptags\",\"comptry\",\"compvalues\",\"dirs\",\"disable\",\"disown\",\"echotc\",\"echoti\",\"emulate\",\"fc\",\"fg\",\"float\",\"functions\",\"getcap\",\"getln\",\"history\",\"integer\",\"jobs\",\"kill\",\"limit\",\"log\",\"noglob\",\"popd\",\"print\",\"pushd\",\"pushln\",\"rehash\",\"sched\",\"setcap\",\"setopt\",\"stat\",\"suspend\",\"ttyctl\",\"unfunction\",\"unhash\",\"unlimit\",\"unsetopt\",\"vared\",\"wait\",\"whence\",\"where\",\"which\",\"zcompile\",\"zformat\",\"zftp\",\"zle\",\"zmodload\",\"zparseopts\",\"zprof\",\"zpty\",\"zregexparse\",\"zsocket\",\"zstyle\",\"ztcp\",\"chcon\",\"chgrp\",\"chown\",\"chmod\",\"cp\",\"dd\",\"df\",\"dir\",\"dircolors\",\"ln\",\"ls\",\"mkdir\",\"mkfifo\",\"mknod\",\"mktemp\",\"mv\",\"realpath\",\"rm\",\"rmdir\",\"shred\",\"sync\",\"touch\",\"truncate\",\"vdir\",\"b2sum\",\"base32\",\"base64\",\"cat\",\"cksum\",\"comm\",\"csplit\",\"cut\",\"expand\",\"fmt\",\"fold\",\"head\",\"join\",\"md5sum\",\"nl\",\"numfmt\",\"od\",\"paste\",\"ptx\",\"pr\",\"sha1sum\",\"sha224sum\",\"sha256sum\",\"sha384sum\",\"sha512sum\",\"shuf\",\"sort\",\"split\",\"sum\",\"tac\",\"tail\",\"tr\",\"tsort\",\"unexpand\",\"uniq\",\"wc\",\"arch\",\"basename\",\"chroot\",\"date\",\"dirname\",\"du\",\"echo\",\"env\",\"expr\",\"factor\",\"groups\",\"hostid\",\"id\",\"link\",\"logname\",\"nice\",\"nohup\",\"nproc\",\"pathchk\",\"pinky\",\"printenv\",\"printf\",\"pwd\",\"readlink\",\"runcon\",\"seq\",\"sleep\",\"stat\",\"stdbuf\",\"stty\",\"tee\",\"test\",\"timeout\",\"tty\",\"uname\",\"unlink\",\"uptime\",\"users\",\"who\",\"whoami\",\"yes\"]\n},contains:[r,e.SHEBANG(),l,o,e.HASH_COMMENT_MODE,i,{match:/(\\/[a-z._-]+)+/},c,{\nclassName:\"\",begin:/\\\\\"/},{className:\"string\",begin:/'/,end:/'/},t]}}})()\n;hljs.registerLanguage(\"bash\",e)})();/*! `shell` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var s=(()=>{\"use strict\";return s=>({name:\"Shell Session\",\naliases:[\"console\",\"shellsession\"],contains:[{className:\"meta.prompt\",\nbegin:/^\\s{0,3}[/~\\w\\d[\\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\\\](?=\\s*$)/,\nsubLanguage:\"bash\"}}]})})();hljs.registerLanguage(\"shell\",s)})();/*! `javascript` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\"\n;const e=\"[A-Za-z$_][0-9A-Za-z$_]*\",n=[\"as\",\"in\",\"of\",\"if\",\"for\",\"while\",\"finally\",\"var\",\"new\",\"function\",\"do\",\"return\",\"void\",\"else\",\"break\",\"catch\",\"instanceof\",\"with\",\"throw\",\"case\",\"default\",\"try\",\"switch\",\"continue\",\"typeof\",\"delete\",\"let\",\"yield\",\"const\",\"class\",\"debugger\",\"async\",\"await\",\"static\",\"import\",\"from\",\"export\",\"extends\"],a=[\"true\",\"false\",\"null\",\"undefined\",\"NaN\",\"Infinity\"],t=[\"Object\",\"Function\",\"Boolean\",\"Symbol\",\"Math\",\"Date\",\"Number\",\"BigInt\",\"String\",\"RegExp\",\"Array\",\"Float32Array\",\"Float64Array\",\"Int8Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Int32Array\",\"Uint16Array\",\"Uint32Array\",\"BigInt64Array\",\"BigUint64Array\",\"Set\",\"Map\",\"WeakSet\",\"WeakMap\",\"ArrayBuffer\",\"SharedArrayBuffer\",\"Atomics\",\"DataView\",\"JSON\",\"Promise\",\"Generator\",\"GeneratorFunction\",\"AsyncFunction\",\"Reflect\",\"Proxy\",\"Intl\",\"WebAssembly\"],s=[\"Error\",\"EvalError\",\"InternalError\",\"RangeError\",\"ReferenceError\",\"SyntaxError\",\"TypeError\",\"URIError\"],r=[\"setInterval\",\"setTimeout\",\"clearInterval\",\"clearTimeout\",\"require\",\"exports\",\"eval\",\"isFinite\",\"isNaN\",\"parseFloat\",\"parseInt\",\"decodeURI\",\"decodeURIComponent\",\"encodeURI\",\"encodeURIComponent\",\"escape\",\"unescape\"],c=[\"arguments\",\"this\",\"super\",\"console\",\"window\",\"document\",\"localStorage\",\"module\",\"global\"],i=[].concat(r,t,s)\n;return o=>{const l=o.regex,b=e,d={begin:/<[A-Za-z0-9\\\\._:-]+/,\nend:/\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,isTrulyOpeningTag:(e,n)=>{\nconst a=e[0].length+e.index,t=e.input[a]\n;if(\"<\"===t||\",\"===t)return void n.ignoreMatch();let s\n;\">\"===t&&(((e,{after:n})=>{const a=\"\",M={\nmatch:[/const|var|let/,/\\s+/,b,/\\s*/,/=\\s*/,/(async\\s*)?/,l.lookahead(C)],\nkeywords:\"async\",className:{1:\"keyword\",3:\"title.function\"},contains:[S]}\n;return{name:\"Javascript\",aliases:[\"js\",\"jsx\",\"mjs\",\"cjs\"],keywords:g,exports:{\nPARAMS_CONTAINS:p,CLASS_REFERENCE:R},illegal:/#(?![$_A-z])/,\ncontains:[o.SHEBANG({label:\"shebang\",binary:\"node\",relevance:5}),{\nlabel:\"use_strict\",className:\"meta\",relevance:10,\nbegin:/^\\s*['\"]use (strict|asm)['\"]/\n},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,y,N,_,h,{match:/\\$\\d+/},E,R,{\nclassName:\"attr\",begin:b+l.lookahead(\":\"),relevance:0},M,{\nbegin:\"(\"+o.RE_STARTERS_RE+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",\nkeywords:\"return throw case\",relevance:0,contains:[h,o.REGEXP_MODE,{\nclassName:\"function\",begin:C,returnBegin:!0,end:\"\\\\s*=>\",contains:[{\nclassName:\"params\",variants:[{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{\nclassName:null,begin:/\\(\\s*\\)/,skip:!0},{begin:/\\(/,end:/\\)/,excludeBegin:!0,\nexcludeEnd:!0,keywords:g,contains:p}]}]},{begin:/,/,relevance:0},{match:/\\s+/,\nrelevance:0},{variants:[{begin:\"<>\",end:\"\"},{\nmatch:/<[A-Za-z0-9\\\\._:-]+\\s*\\/>/},{begin:d.begin,\n\"on:begin\":d.isTrulyOpeningTag,end:d.end}],subLanguage:\"xml\",contains:[{\nbegin:d.begin,end:d.end,skip:!0,contains:[\"self\"]}]}]},O,{\nbeginKeywords:\"while if switch catch for\"},{\nbegin:\"\\\\b(?!function)\"+o.UNDERSCORE_IDENT_RE+\"\\\\([^()]*(\\\\([^()]*(\\\\([^()]*\\\\)[^()]*)*\\\\)[^()]*)*\\\\)\\\\s*\\\\{\",\nreturnBegin:!0,label:\"func.def\",contains:[S,o.inherit(o.TITLE_MODE,{begin:b,\nclassName:\"title.function\"})]},{match:/\\.\\.\\./,relevance:0},x,{match:\"\\\\$\"+b,\nrelevance:0},{match:[/\\bconstructor(?=\\s*\\()/],className:{1:\"title.function\"},\ncontains:[S]},k,{relevance:0,match:/\\b[A-Z][A-Z_0-9]+\\b/,\nclassName:\"variable.constant\"},w,T,{match:/\\$[(.]/}]}}})()\n;hljs.registerLanguage(\"javascript\",e)})();/*! `lua` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{const t=\"\\\\[=*\\\\[\",a=\"\\\\]=*\\\\]\",n={\nbegin:t,end:a,contains:[\"self\"]\n},o=[e.COMMENT(\"--(?!\\\\[=*\\\\[)\",\"$\"),e.COMMENT(\"--\\\\[=*\\\\[\",a,{contains:[n],\nrelevance:10})];return{name:\"Lua\",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,\nliteral:\"true false nil\",\nkeyword:\"and break do else elseif end for goto if in local not or repeat return then until while\",\nbuilt_in:\"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove\"\n},contains:o.concat([{className:\"function\",beginKeywords:\"function\",end:\"\\\\)\",\ncontains:[e.inherit(e.TITLE_MODE,{\nbegin:\"([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*\"}),{className:\"params\",\nbegin:\"\\\\(\",endsWithParent:!0,contains:o}].concat(o)\n},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:\"string\",\nbegin:t,end:a,contains:[n],relevance:5}])}}})();hljs.registerLanguage(\"lua\",e)\n})();/*! `less` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\"\n;const e=[\"a\",\"abbr\",\"address\",\"article\",\"aside\",\"audio\",\"b\",\"blockquote\",\"body\",\"button\",\"canvas\",\"caption\",\"cite\",\"code\",\"dd\",\"del\",\"details\",\"dfn\",\"div\",\"dl\",\"dt\",\"em\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"html\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"label\",\"legend\",\"li\",\"main\",\"mark\",\"menu\",\"nav\",\"object\",\"ol\",\"p\",\"q\",\"quote\",\"samp\",\"section\",\"span\",\"strong\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"ul\",\"var\",\"video\"],t=[\"any-hover\",\"any-pointer\",\"aspect-ratio\",\"color\",\"color-gamut\",\"color-index\",\"device-aspect-ratio\",\"device-height\",\"device-width\",\"display-mode\",\"forced-colors\",\"grid\",\"height\",\"hover\",\"inverted-colors\",\"monochrome\",\"orientation\",\"overflow-block\",\"overflow-inline\",\"pointer\",\"prefers-color-scheme\",\"prefers-contrast\",\"prefers-reduced-motion\",\"prefers-reduced-transparency\",\"resolution\",\"scan\",\"scripting\",\"update\",\"width\",\"min-width\",\"max-width\",\"min-height\",\"max-height\"],r=[\"active\",\"any-link\",\"blank\",\"checked\",\"current\",\"default\",\"defined\",\"dir\",\"disabled\",\"drop\",\"empty\",\"enabled\",\"first\",\"first-child\",\"first-of-type\",\"fullscreen\",\"future\",\"focus\",\"focus-visible\",\"focus-within\",\"has\",\"host\",\"host-context\",\"hover\",\"indeterminate\",\"in-range\",\"invalid\",\"is\",\"lang\",\"last-child\",\"last-of-type\",\"left\",\"link\",\"local-link\",\"not\",\"nth-child\",\"nth-col\",\"nth-last-child\",\"nth-last-col\",\"nth-last-of-type\",\"nth-of-type\",\"only-child\",\"only-of-type\",\"optional\",\"out-of-range\",\"past\",\"placeholder-shown\",\"read-only\",\"read-write\",\"required\",\"right\",\"root\",\"scope\",\"target\",\"target-within\",\"user-invalid\",\"valid\",\"visited\",\"where\"],i=[\"after\",\"backdrop\",\"before\",\"cue\",\"cue-region\",\"first-letter\",\"first-line\",\"grammar-error\",\"marker\",\"part\",\"placeholder\",\"selection\",\"slotted\",\"spelling-error\"],o=[\"align-content\",\"align-items\",\"align-self\",\"all\",\"animation\",\"animation-delay\",\"animation-direction\",\"animation-duration\",\"animation-fill-mode\",\"animation-iteration-count\",\"animation-name\",\"animation-play-state\",\"animation-timing-function\",\"backface-visibility\",\"background\",\"background-attachment\",\"background-blend-mode\",\"background-clip\",\"background-color\",\"background-image\",\"background-origin\",\"background-position\",\"background-repeat\",\"background-size\",\"block-size\",\"border\",\"border-block\",\"border-block-color\",\"border-block-end\",\"border-block-end-color\",\"border-block-end-style\",\"border-block-end-width\",\"border-block-start\",\"border-block-start-color\",\"border-block-start-style\",\"border-block-start-width\",\"border-block-style\",\"border-block-width\",\"border-bottom\",\"border-bottom-color\",\"border-bottom-left-radius\",\"border-bottom-right-radius\",\"border-bottom-style\",\"border-bottom-width\",\"border-collapse\",\"border-color\",\"border-image\",\"border-image-outset\",\"border-image-repeat\",\"border-image-slice\",\"border-image-source\",\"border-image-width\",\"border-inline\",\"border-inline-color\",\"border-inline-end\",\"border-inline-end-color\",\"border-inline-end-style\",\"border-inline-end-width\",\"border-inline-start\",\"border-inline-start-color\",\"border-inline-start-style\",\"border-inline-start-width\",\"border-inline-style\",\"border-inline-width\",\"border-left\",\"border-left-color\",\"border-left-style\",\"border-left-width\",\"border-radius\",\"border-right\",\"border-right-color\",\"border-right-style\",\"border-right-width\",\"border-spacing\",\"border-style\",\"border-top\",\"border-top-color\",\"border-top-left-radius\",\"border-top-right-radius\",\"border-top-style\",\"border-top-width\",\"border-width\",\"bottom\",\"box-decoration-break\",\"box-shadow\",\"box-sizing\",\"break-after\",\"break-before\",\"break-inside\",\"caption-side\",\"caret-color\",\"clear\",\"clip\",\"clip-path\",\"clip-rule\",\"color\",\"column-count\",\"column-fill\",\"column-gap\",\"column-rule\",\"column-rule-color\",\"column-rule-style\",\"column-rule-width\",\"column-span\",\"column-width\",\"columns\",\"contain\",\"content\",\"content-visibility\",\"counter-increment\",\"counter-reset\",\"cue\",\"cue-after\",\"cue-before\",\"cursor\",\"direction\",\"display\",\"empty-cells\",\"filter\",\"flex\",\"flex-basis\",\"flex-direction\",\"flex-flow\",\"flex-grow\",\"flex-shrink\",\"flex-wrap\",\"float\",\"flow\",\"font\",\"font-display\",\"font-family\",\"font-feature-settings\",\"font-kerning\",\"font-language-override\",\"font-size\",\"font-size-adjust\",\"font-smoothing\",\"font-stretch\",\"font-style\",\"font-synthesis\",\"font-variant\",\"font-variant-caps\",\"font-variant-east-asian\",\"font-variant-ligatures\",\"font-variant-numeric\",\"font-variant-position\",\"font-variation-settings\",\"font-weight\",\"gap\",\"glyph-orientation-vertical\",\"grid\",\"grid-area\",\"grid-auto-columns\",\"grid-auto-flow\",\"grid-auto-rows\",\"grid-column\",\"grid-column-end\",\"grid-column-start\",\"grid-gap\",\"grid-row\",\"grid-row-end\",\"grid-row-start\",\"grid-template\",\"grid-template-areas\",\"grid-template-columns\",\"grid-template-rows\",\"hanging-punctuation\",\"height\",\"hyphens\",\"icon\",\"image-orientation\",\"image-rendering\",\"image-resolution\",\"ime-mode\",\"inline-size\",\"isolation\",\"justify-content\",\"left\",\"letter-spacing\",\"line-break\",\"line-height\",\"list-style\",\"list-style-image\",\"list-style-position\",\"list-style-type\",\"margin\",\"margin-block\",\"margin-block-end\",\"margin-block-start\",\"margin-bottom\",\"margin-inline\",\"margin-inline-end\",\"margin-inline-start\",\"margin-left\",\"margin-right\",\"margin-top\",\"marks\",\"mask\",\"mask-border\",\"mask-border-mode\",\"mask-border-outset\",\"mask-border-repeat\",\"mask-border-slice\",\"mask-border-source\",\"mask-border-width\",\"mask-clip\",\"mask-composite\",\"mask-image\",\"mask-mode\",\"mask-origin\",\"mask-position\",\"mask-repeat\",\"mask-size\",\"mask-type\",\"max-block-size\",\"max-height\",\"max-inline-size\",\"max-width\",\"min-block-size\",\"min-height\",\"min-inline-size\",\"min-width\",\"mix-blend-mode\",\"nav-down\",\"nav-index\",\"nav-left\",\"nav-right\",\"nav-up\",\"none\",\"normal\",\"object-fit\",\"object-position\",\"opacity\",\"order\",\"orphans\",\"outline\",\"outline-color\",\"outline-offset\",\"outline-style\",\"outline-width\",\"overflow\",\"overflow-wrap\",\"overflow-x\",\"overflow-y\",\"padding\",\"padding-block\",\"padding-block-end\",\"padding-block-start\",\"padding-bottom\",\"padding-inline\",\"padding-inline-end\",\"padding-inline-start\",\"padding-left\",\"padding-right\",\"padding-top\",\"page-break-after\",\"page-break-before\",\"page-break-inside\",\"pause\",\"pause-after\",\"pause-before\",\"perspective\",\"perspective-origin\",\"pointer-events\",\"position\",\"quotes\",\"resize\",\"rest\",\"rest-after\",\"rest-before\",\"right\",\"row-gap\",\"scroll-margin\",\"scroll-margin-block\",\"scroll-margin-block-end\",\"scroll-margin-block-start\",\"scroll-margin-bottom\",\"scroll-margin-inline\",\"scroll-margin-inline-end\",\"scroll-margin-inline-start\",\"scroll-margin-left\",\"scroll-margin-right\",\"scroll-margin-top\",\"scroll-padding\",\"scroll-padding-block\",\"scroll-padding-block-end\",\"scroll-padding-block-start\",\"scroll-padding-bottom\",\"scroll-padding-inline\",\"scroll-padding-inline-end\",\"scroll-padding-inline-start\",\"scroll-padding-left\",\"scroll-padding-right\",\"scroll-padding-top\",\"scroll-snap-align\",\"scroll-snap-stop\",\"scroll-snap-type\",\"scrollbar-color\",\"scrollbar-gutter\",\"scrollbar-width\",\"shape-image-threshold\",\"shape-margin\",\"shape-outside\",\"speak\",\"speak-as\",\"src\",\"tab-size\",\"table-layout\",\"text-align\",\"text-align-all\",\"text-align-last\",\"text-combine-upright\",\"text-decoration\",\"text-decoration-color\",\"text-decoration-line\",\"text-decoration-style\",\"text-emphasis\",\"text-emphasis-color\",\"text-emphasis-position\",\"text-emphasis-style\",\"text-indent\",\"text-justify\",\"text-orientation\",\"text-overflow\",\"text-rendering\",\"text-shadow\",\"text-transform\",\"text-underline-position\",\"top\",\"transform\",\"transform-box\",\"transform-origin\",\"transform-style\",\"transition\",\"transition-delay\",\"transition-duration\",\"transition-property\",\"transition-timing-function\",\"unicode-bidi\",\"vertical-align\",\"visibility\",\"voice-balance\",\"voice-duration\",\"voice-family\",\"voice-pitch\",\"voice-range\",\"voice-rate\",\"voice-stress\",\"voice-volume\",\"white-space\",\"widows\",\"width\",\"will-change\",\"word-break\",\"word-spacing\",\"word-wrap\",\"writing-mode\",\"z-index\"].reverse(),n=r.concat(i)\n;return a=>{const l=(e=>({IMPORTANT:{scope:\"meta\",begin:\"!important\"},\nBLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:\"number\",\nbegin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/},FUNCTION_DISPATCH:{\nclassName:\"built_in\",begin:/[\\w-]+(?=\\()/},ATTRIBUTE_SELECTOR_MODE:{\nscope:\"selector-attr\",begin:/\\[/,end:/\\]/,illegal:\"$\",\ncontains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{\nscope:\"number\",\nbegin:e.NUMBER_RE+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",\nrelevance:0},CSS_VARIABLE:{className:\"attr\",begin:/--[A-Za-z][A-Za-z0-9_-]*/}\n}))(a),s=n,d=\"([\\\\w-]+|@\\\\{[\\\\w-]+\\\\})\",c=[],g=[],b=e=>({className:\"string\",\nbegin:\"~?\"+e+\".*?\"+e}),m=(e,t,r)=>({className:e,begin:t,relevance:r}),p={\n$pattern:/[a-z-]+/,keyword:\"and or not only\",attribute:t.join(\" \")},u={\nbegin:\"\\\\(\",end:\"\\\\)\",contains:g,keywords:p,relevance:0}\n;g.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,b(\"'\"),b('\"'),l.CSS_NUMBER_MODE,{\nbegin:\"(url|data-uri)\\\\(\",starts:{className:\"string\",end:\"[\\\\)\\\\n]\",\nexcludeEnd:!0}\n},l.HEXCOLOR,u,m(\"variable\",\"@@?[\\\\w-]+\",10),m(\"variable\",\"@\\\\{[\\\\w-]+\\\\}\"),m(\"built_in\",\"~?`[^`]*?`\"),{\nclassName:\"attribute\",begin:\"[\\\\w-]+\\\\s*:\",end:\":\",returnBegin:!0,excludeEnd:!0\n},l.IMPORTANT,{beginKeywords:\"and not\"},l.FUNCTION_DISPATCH);const h=g.concat({\nbegin:/\\{/,end:/\\}/,contains:c}),f={beginKeywords:\"when\",endsWithParent:!0,\ncontains:[{beginKeywords:\"and not\"}].concat(g)},k={begin:d+\"\\\\s*:\",\nreturnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/\n},l.CSS_VARIABLE,{className:\"attribute\",begin:\"\\\\b(\"+o.join(\"|\")+\")\\\\b\",\nend:/(?=:)/,starts:{endsWithParent:!0,illegal:\"[<=$]\",relevance:0,contains:g}}]\n},w={className:\"keyword\",\nbegin:\"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\b\",\nstarts:{end:\"[;{}]\",keywords:p,returnEnd:!0,contains:g,relevance:0}},v={\nclassName:\"variable\",variants:[{begin:\"@[\\\\w-]+\\\\s*:\",relevance:15},{\nbegin:\"@[\\\\w-]+\"}],starts:{end:\"[;}]\",returnEnd:!0,contains:h}},y={variants:[{\nbegin:\"[\\\\.#:&\\\\[>]\",end:\"[;{}]\"},{begin:d,end:/\\{/}],returnBegin:!0,\nreturnEnd:!0,illegal:\"[<='$\\\"]\",relevance:0,\ncontains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,f,m(\"keyword\",\"all\\\\b\"),m(\"variable\",\"@\\\\{[\\\\w-]+\\\\}\"),{\nbegin:\"\\\\b(\"+e.join(\"|\")+\")\\\\b\",className:\"selector-tag\"\n},l.CSS_NUMBER_MODE,m(\"selector-tag\",d,0),m(\"selector-id\",\"#\"+d),m(\"selector-class\",\"\\\\.\"+d,0),m(\"selector-tag\",\"&\",0),l.ATTRIBUTE_SELECTOR_MODE,{\nclassName:\"selector-pseudo\",begin:\":(\"+r.join(\"|\")+\")\"},{\nclassName:\"selector-pseudo\",begin:\":(:)?(\"+i.join(\"|\")+\")\"},{begin:/\\(/,\nend:/\\)/,relevance:0,contains:h},{begin:\"!important\"},l.FUNCTION_DISPATCH]},x={\nbegin:`[\\\\w-]+:(:)?(${s.join(\"|\")})`,returnBegin:!0,contains:[y]}\n;return c.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,w,v,x,k,y,f,l.FUNCTION_DISPATCH),\n{name:\"Less\",case_insensitive:!0,illegal:\"[=>'/<($\\\"]\",contains:c}}})()\n;hljs.registerLanguage(\"less\",e)})();/*! `csharp` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{const n={\nkeyword:[\"abstract\",\"as\",\"base\",\"break\",\"case\",\"catch\",\"class\",\"const\",\"continue\",\"do\",\"else\",\"event\",\"explicit\",\"extern\",\"finally\",\"fixed\",\"for\",\"foreach\",\"goto\",\"if\",\"implicit\",\"in\",\"interface\",\"internal\",\"is\",\"lock\",\"namespace\",\"new\",\"operator\",\"out\",\"override\",\"params\",\"private\",\"protected\",\"public\",\"readonly\",\"record\",\"ref\",\"return\",\"scoped\",\"sealed\",\"sizeof\",\"stackalloc\",\"static\",\"struct\",\"switch\",\"this\",\"throw\",\"try\",\"typeof\",\"unchecked\",\"unsafe\",\"using\",\"virtual\",\"void\",\"volatile\",\"while\"].concat([\"add\",\"alias\",\"and\",\"ascending\",\"async\",\"await\",\"by\",\"descending\",\"equals\",\"from\",\"get\",\"global\",\"group\",\"init\",\"into\",\"join\",\"let\",\"nameof\",\"not\",\"notnull\",\"on\",\"or\",\"orderby\",\"partial\",\"remove\",\"select\",\"set\",\"unmanaged\",\"value|0\",\"var\",\"when\",\"where\",\"with\",\"yield\"]),\nbuilt_in:[\"bool\",\"byte\",\"char\",\"decimal\",\"delegate\",\"double\",\"dynamic\",\"enum\",\"float\",\"int\",\"long\",\"nint\",\"nuint\",\"object\",\"sbyte\",\"short\",\"string\",\"ulong\",\"uint\",\"ushort\"],\nliteral:[\"default\",\"false\",\"null\",\"true\"]},a=e.inherit(e.TITLE_MODE,{\nbegin:\"[a-zA-Z](\\\\.?\\\\w)*\"}),i={className:\"number\",variants:[{\nbegin:\"\\\\b(0b[01']+)\"},{\nbegin:\"(-?)\\\\b([\\\\d']+(\\\\.[\\\\d']*)?|\\\\.[\\\\d']+)(u|U|l|L|ul|UL|f|F|b|B)\"},{\nbegin:\"(-?)(\\\\b0[xX][a-fA-F0-9']+|(\\\\b[\\\\d']+(\\\\.[\\\\d']*)?|\\\\.[\\\\d']+)([eE][-+]?[\\\\d']+)?)\"\n}],relevance:0},s={className:\"string\",begin:'@\"',end:'\"',contains:[{begin:'\"\"'}]\n},t=e.inherit(s,{illegal:/\\n/}),r={className:\"subst\",begin:/\\{/,end:/\\}/,\nkeywords:n},l=e.inherit(r,{illegal:/\\n/}),c={className:\"string\",begin:/\\$\"/,\nend:'\"',illegal:/\\n/,contains:[{begin:/\\{\\{/},{begin:/\\}\\}/\n},e.BACKSLASH_ESCAPE,l]},o={className:\"string\",begin:/\\$@\"/,end:'\"',contains:[{\nbegin:/\\{\\{/},{begin:/\\}\\}/},{begin:'\"\"'},r]},d=e.inherit(o,{illegal:/\\n/,\ncontains:[{begin:/\\{\\{/},{begin:/\\}\\}/},{begin:'\"\"'},l]})\n;r.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.C_BLOCK_COMMENT_MODE],\nl.contains=[d,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.inherit(e.C_BLOCK_COMMENT_MODE,{\nillegal:/\\n/})];const g={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]\n},E={begin:\"<\",end:\">\",contains:[{beginKeywords:\"in out\"},a]\n},_=e.IDENT_RE+\"(<\"+e.IDENT_RE+\"(\\\\s*,\\\\s*\"+e.IDENT_RE+\")*>)?(\\\\[\\\\])?\",b={\nbegin:\"@\"+e.IDENT_RE,relevance:0};return{name:\"C#\",aliases:[\"cs\",\"c#\"],\nkeywords:n,illegal:/::/,contains:[e.COMMENT(\"///\",\"$\",{returnBegin:!0,\ncontains:[{className:\"doctag\",variants:[{begin:\"///\",relevance:0},{\nbegin:\"\\x3c!--|--\\x3e\"},{begin:\"\"}]}]\n}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:\"meta\",begin:\"#\",\nend:\"$\",keywords:{\nkeyword:\"if else elif endif define undef warning error line region endregion pragma checksum\"\n}},g,i,{beginKeywords:\"class interface\",relevance:0,end:/[{;=]/,\nillegal:/[^\\s:,]/,contains:[{beginKeywords:\"where class\"\n},a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:\"namespace\",\nrelevance:0,end:/[{;=]/,illegal:/[^\\s:]/,\ncontains:[a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{\nbeginKeywords:\"record\",relevance:0,end:/[{;=]/,illegal:/[^\\s:]/,\ncontains:[a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:\"meta\",\nbegin:\"^\\\\s*\\\\[(?=[\\\\w])\",excludeBegin:!0,end:\"\\\\]\",excludeEnd:!0,contains:[{\nclassName:\"string\",begin:/\"/,end:/\"/}]},{\nbeginKeywords:\"new return throw await else\",relevance:0},{className:\"function\",\nbegin:\"(\"+_+\"\\\\s+)+\"+e.IDENT_RE+\"\\\\s*(<[^=]+>\\\\s*)?\\\\(\",returnBegin:!0,\nend:/\\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{\nbeginKeywords:\"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial\",\nrelevance:0},{begin:e.IDENT_RE+\"\\\\s*(<[^=]+>\\\\s*)?\\\\(\",returnBegin:!0,\ncontains:[e.TITLE_MODE,E],relevance:0},{match:/\\(\\)/},{className:\"params\",\nbegin:/\\(/,end:/\\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,\ncontains:[g,i,e.C_BLOCK_COMMENT_MODE]\n},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}})()\n;hljs.registerLanguage(\"csharp\",e)})();/*! `typescript` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\"\n;const e=\"[A-Za-z$_][0-9A-Za-z$_]*\",n=[\"as\",\"in\",\"of\",\"if\",\"for\",\"while\",\"finally\",\"var\",\"new\",\"function\",\"do\",\"return\",\"void\",\"else\",\"break\",\"catch\",\"instanceof\",\"with\",\"throw\",\"case\",\"default\",\"try\",\"switch\",\"continue\",\"typeof\",\"delete\",\"let\",\"yield\",\"const\",\"class\",\"debugger\",\"async\",\"await\",\"static\",\"import\",\"from\",\"export\",\"extends\"],a=[\"true\",\"false\",\"null\",\"undefined\",\"NaN\",\"Infinity\"],t=[\"Object\",\"Function\",\"Boolean\",\"Symbol\",\"Math\",\"Date\",\"Number\",\"BigInt\",\"String\",\"RegExp\",\"Array\",\"Float32Array\",\"Float64Array\",\"Int8Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Int32Array\",\"Uint16Array\",\"Uint32Array\",\"BigInt64Array\",\"BigUint64Array\",\"Set\",\"Map\",\"WeakSet\",\"WeakMap\",\"ArrayBuffer\",\"SharedArrayBuffer\",\"Atomics\",\"DataView\",\"JSON\",\"Promise\",\"Generator\",\"GeneratorFunction\",\"AsyncFunction\",\"Reflect\",\"Proxy\",\"Intl\",\"WebAssembly\"],s=[\"Error\",\"EvalError\",\"InternalError\",\"RangeError\",\"ReferenceError\",\"SyntaxError\",\"TypeError\",\"URIError\"],c=[\"setInterval\",\"setTimeout\",\"clearInterval\",\"clearTimeout\",\"require\",\"exports\",\"eval\",\"isFinite\",\"isNaN\",\"parseFloat\",\"parseInt\",\"decodeURI\",\"decodeURIComponent\",\"encodeURI\",\"encodeURIComponent\",\"escape\",\"unescape\"],r=[\"arguments\",\"this\",\"super\",\"console\",\"window\",\"document\",\"localStorage\",\"module\",\"global\"],i=[].concat(c,t,s)\n;function o(o){const l=o.regex,d=e,b={begin:/<[A-Za-z0-9\\\\._:-]+/,\nend:/\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,isTrulyOpeningTag:(e,n)=>{\nconst a=e[0].length+e.index,t=e.input[a]\n;if(\"<\"===t||\",\"===t)return void n.ignoreMatch();let s\n;\">\"===t&&(((e,{after:n})=>{const a=\"\",M={\nmatch:[/const|var|let/,/\\s+/,d,/\\s*/,/=\\s*/,/(async\\s*)?/,l.lookahead(T)],\nkeywords:\"async\",className:{1:\"keyword\",3:\"title.function\"},contains:[S]}\n;return{name:\"Javascript\",aliases:[\"js\",\"jsx\",\"mjs\",\"cjs\"],keywords:g,exports:{\nPARAMS_CONTAINS:v,CLASS_REFERENCE:R},illegal:/#(?![$_A-z])/,\ncontains:[o.SHEBANG({label:\"shebang\",binary:\"node\",relevance:5}),{\nlabel:\"use_strict\",className:\"meta\",relevance:10,\nbegin:/^\\s*['\"]use (strict|asm)['\"]/\n},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,A,p,_,N,{match:/\\$\\d+/},E,R,{\nclassName:\"attr\",begin:d+l.lookahead(\":\"),relevance:0},M,{\nbegin:\"(\"+o.RE_STARTERS_RE+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",\nkeywords:\"return throw case\",relevance:0,contains:[N,o.REGEXP_MODE,{\nclassName:\"function\",begin:T,returnBegin:!0,end:\"\\\\s*=>\",contains:[{\nclassName:\"params\",variants:[{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{\nclassName:null,begin:/\\(\\s*\\)/,skip:!0},{begin:/\\(/,end:/\\)/,excludeBegin:!0,\nexcludeEnd:!0,keywords:g,contains:v}]}]},{begin:/,/,relevance:0},{match:/\\s+/,\nrelevance:0},{variants:[{begin:\"<>\",end:\"\"},{\nmatch:/<[A-Za-z0-9\\\\._:-]+\\s*\\/>/},{begin:b.begin,\n\"on:begin\":b.isTrulyOpeningTag,end:b.end}],subLanguage:\"xml\",contains:[{\nbegin:b.begin,end:b.end,skip:!0,contains:[\"self\"]}]}]},x,{\nbeginKeywords:\"while if switch catch for\"},{\nbegin:\"\\\\b(?!function)\"+o.UNDERSCORE_IDENT_RE+\"\\\\([^()]*(\\\\([^()]*(\\\\([^()]*\\\\)[^()]*)*\\\\)[^()]*)*\\\\)\\\\s*\\\\{\",\nreturnBegin:!0,label:\"func.def\",contains:[S,o.inherit(o.TITLE_MODE,{begin:d,\nclassName:\"title.function\"})]},{match:/\\.\\.\\./,relevance:0},I,{match:\"\\\\$\"+d,\nrelevance:0},{match:[/\\bconstructor(?=\\s*\\()/],className:{1:\"title.function\"},\ncontains:[S]},k,{relevance:0,match:/\\b[A-Z][A-Z_0-9]+\\b/,\nclassName:\"variable.constant\"},w,C,{match:/\\$[(.]/}]}}return t=>{\nconst s=o(t),c=[\"any\",\"void\",\"number\",\"boolean\",\"string\",\"object\",\"never\",\"symbol\",\"bigint\",\"unknown\"],l={\nbeginKeywords:\"namespace\",end:/\\{/,excludeEnd:!0,\ncontains:[s.exports.CLASS_REFERENCE]},d={beginKeywords:\"interface\",end:/\\{/,\nexcludeEnd:!0,keywords:{keyword:\"interface extends\",built_in:c},\ncontains:[s.exports.CLASS_REFERENCE]},b={$pattern:e,\nkeyword:n.concat([\"type\",\"namespace\",\"interface\",\"public\",\"private\",\"protected\",\"implements\",\"declare\",\"abstract\",\"readonly\",\"enum\",\"override\"]),\nliteral:a,built_in:i.concat(c),\"variable.language\":r},g={className:\"meta\",\nbegin:\"@[A-Za-z$_][0-9A-Za-z$_]*\"},u=(e,n,a)=>{\nconst t=e.contains.findIndex((e=>e.label===n))\n;if(-1===t)throw Error(\"can not find mode to replace\");e.contains.splice(t,1,a)}\n;return Object.assign(s.keywords,b),\ns.exports.PARAMS_CONTAINS.push(g),s.contains=s.contains.concat([g,l,d]),\nu(s,\"shebang\",t.SHEBANG()),u(s,\"use_strict\",{className:\"meta\",relevance:10,\nbegin:/^\\s*['\"]use strict['\"]/\n}),s.contains.find((e=>\"func.def\"===e.label)).relevance=0,Object.assign(s,{\nname:\"TypeScript\",aliases:[\"ts\",\"tsx\"]}),s}})()\n;hljs.registerLanguage(\"typescript\",e)})();/*! `python` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{\nconst n=e.regex,a=/[\\p{XID_Start}_]\\p{XID_Continue}*/u,i=[\"and\",\"as\",\"assert\",\"async\",\"await\",\"break\",\"case\",\"class\",\"continue\",\"def\",\"del\",\"elif\",\"else\",\"except\",\"finally\",\"for\",\"from\",\"global\",\"if\",\"import\",\"in\",\"is\",\"lambda\",\"match\",\"nonlocal|10\",\"not\",\"or\",\"pass\",\"raise\",\"return\",\"try\",\"while\",\"with\",\"yield\"],s={\n$pattern:/[A-Za-z]\\w+|__\\w+__/,keyword:i,\nbuilt_in:[\"__import__\",\"abs\",\"all\",\"any\",\"ascii\",\"bin\",\"bool\",\"breakpoint\",\"bytearray\",\"bytes\",\"callable\",\"chr\",\"classmethod\",\"compile\",\"complex\",\"delattr\",\"dict\",\"dir\",\"divmod\",\"enumerate\",\"eval\",\"exec\",\"filter\",\"float\",\"format\",\"frozenset\",\"getattr\",\"globals\",\"hasattr\",\"hash\",\"help\",\"hex\",\"id\",\"input\",\"int\",\"isinstance\",\"issubclass\",\"iter\",\"len\",\"list\",\"locals\",\"map\",\"max\",\"memoryview\",\"min\",\"next\",\"object\",\"oct\",\"open\",\"ord\",\"pow\",\"print\",\"property\",\"range\",\"repr\",\"reversed\",\"round\",\"set\",\"setattr\",\"slice\",\"sorted\",\"staticmethod\",\"str\",\"sum\",\"super\",\"tuple\",\"type\",\"vars\",\"zip\"],\nliteral:[\"__debug__\",\"Ellipsis\",\"False\",\"None\",\"NotImplemented\",\"True\"],\ntype:[\"Any\",\"Callable\",\"Coroutine\",\"Dict\",\"List\",\"Literal\",\"Generic\",\"Optional\",\"Sequence\",\"Set\",\"Tuple\",\"Type\",\"Union\"]\n},t={className:\"meta\",begin:/^(>>>|\\.\\.\\.) /},r={className:\"subst\",begin:/\\{/,\nend:/\\}/,keywords:s,illegal:/#/},l={begin:/\\{\\{/,relevance:0},b={\nclassName:\"string\",contains:[e.BACKSLASH_ESCAPE],variants:[{\nbegin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,\ncontains:[e.BACKSLASH_ESCAPE,t],relevance:10},{\nbegin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\"\"\"/,end:/\"\"\"/,\ncontains:[e.BACKSLASH_ESCAPE,t],relevance:10},{\nbegin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,\ncontains:[e.BACKSLASH_ESCAPE,t,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])\"\"\"/,\nend:/\"\"\"/,contains:[e.BACKSLASH_ESCAPE,t,l,r]},{begin:/([uU]|[rR])'/,end:/'/,\nrelevance:10},{begin:/([uU]|[rR])\"/,end:/\"/,relevance:10},{\nbegin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])\"/,\nend:/\"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,\ncontains:[e.BACKSLASH_ESCAPE,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])\"/,end:/\"/,\ncontains:[e.BACKSLASH_ESCAPE,l,r]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]\n},o=\"[0-9](_?[0-9])*\",c=`(\\\\b(${o}))?\\\\.(${o})|\\\\b(${o})\\\\.`,d=\"\\\\b|\"+i.join(\"|\"),g={\nclassName:\"number\",relevance:0,variants:[{\nbegin:`(\\\\b(${o})|(${c}))[eE][+-]?(${o})[jJ]?(?=${d})`},{begin:`(${c})[jJ]?`},{\nbegin:`\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${d})`},{\nbegin:`\\\\b0[bB](_?[01])+[lL]?(?=${d})`},{begin:`\\\\b0[oO](_?[0-7])+[lL]?(?=${d})`\n},{begin:`\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${d})`},{begin:`\\\\b(${o})[jJ](?=${d})`\n}]},p={className:\"comment\",begin:n.lookahead(/# type:/),end:/$/,keywords:s,\ncontains:[{begin:/# type:/},{begin:/#/,end:/\\b\\B/,endsWithParent:!0}]},m={\nclassName:\"params\",variants:[{className:\"\",begin:/\\(\\s*\\)/,skip:!0},{begin:/\\(/,\nend:/\\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,\ncontains:[\"self\",t,g,b,e.HASH_COMMENT_MODE]}]};return r.contains=[b,g,t],{\nname:\"Python\",aliases:[\"py\",\"gyp\",\"ipython\"],unicodeRegex:!0,keywords:s,\nillegal:/(<\\/|->|\\?)|=>/,contains:[t,g,{begin:/\\bself\\b/},{beginKeywords:\"if\",\nrelevance:0},b,p,e.HASH_COMMENT_MODE,{match:[/\\bdef/,/\\s+/,a],scope:{\n1:\"keyword\",3:\"title.function\"},contains:[m]},{variants:[{\nmatch:[/\\bclass/,/\\s+/,a,/\\s*/,/\\(\\s*/,a,/\\s*\\)/]},{match:[/\\bclass/,/\\s+/,a]}],\nscope:{1:\"keyword\",3:\"title.class\",6:\"title.class.inherited\"}},{\nclassName:\"meta\",begin:/^[\\t ]*@/,end:/(?=#)|$/,contains:[g,m,b]}]}}})()\n;hljs.registerLanguage(\"python\",e)})();/*! `r` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{\nconst a=e.regex,n=/(?:(?:[a-zA-Z]|\\.[._a-zA-Z])[._a-zA-Z0-9]*)|\\.(?!\\d)/,i=a.either(/0[xX][0-9a-fA-F]+\\.[0-9a-fA-F]*[pP][+-]?\\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\\d+)?[Li]?/,/(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?[Li]?/),s=/[=!<>:]=|\\|\\||&&|:::?|<-|<<-|->>|->|\\|>|[-+*\\/?!$&|:<=>@^~]|\\*\\*/,t=a.either(/[()]/,/[{}]/,/\\[\\[/,/[[\\]]/,/\\\\/,/,/)\n;return{name:\"R\",keywords:{$pattern:n,\nkeyword:\"function if in break next repeat else for while\",\nliteral:\"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10\",\nbuilt_in:\"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm\"\n},contains:[e.COMMENT(/#'/,/$/,{contains:[{scope:\"doctag\",match:/@examples/,\nstarts:{end:a.lookahead(a.either(/\\n^#'\\s*(?=@[a-zA-Z]+)/,/\\n^(?!#')/)),\nendsParent:!0}},{scope:\"doctag\",begin:\"@param\",end:/$/,contains:[{\nscope:\"variable\",variants:[{match:n},{match:/`(?:\\\\.|[^`\\\\])+`/}],endsParent:!0\n}]},{scope:\"doctag\",match:/@[a-zA-Z]+/},{scope:\"keyword\",match:/\\\\[a-zA-Z]+/}]\n}),e.HASH_COMMENT_MODE,{scope:\"string\",contains:[e.BACKSLASH_ESCAPE],\nvariants:[e.END_SAME_AS_BEGIN({begin:/[rR]\"(-*)\\(/,end:/\\)(-*)\"/\n}),e.END_SAME_AS_BEGIN({begin:/[rR]\"(-*)\\{/,end:/\\}(-*)\"/\n}),e.END_SAME_AS_BEGIN({begin:/[rR]\"(-*)\\[/,end:/\\](-*)\"/\n}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\\(/,end:/\\)(-*)'/\n}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\\{/,end:/\\}(-*)'/\n}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\\[/,end:/\\](-*)'/}),{begin:'\"',end:'\"',\nrelevance:0},{begin:\"'\",end:\"'\",relevance:0}]},{relevance:0,variants:[{scope:{\n1:\"operator\",2:\"number\"},match:[s,i]},{scope:{1:\"operator\",2:\"number\"},\nmatch:[/%[^%]*%/,i]},{scope:{1:\"punctuation\",2:\"number\"},match:[t,i]},{scope:{\n2:\"number\"},match:[/[^a-zA-Z0-9._]|^/,i]}]},{scope:{3:\"operator\"},\nmatch:[n,/\\s+/,/<-/,/\\s+/]},{scope:\"operator\",relevance:0,variants:[{match:s},{\nmatch:/%[^%]*%/}]},{scope:\"punctuation\",relevance:0,match:t},{begin:\"`\",end:\"`\",\ncontains:[{begin:/\\\\./}]}]}}})();hljs.registerLanguage(\"r\",e)})();/*! `vbnet` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{\nconst n=e.regex,t=/\\d{1,2}\\/\\d{1,2}\\/\\d{4}/,a=/\\d{4}-\\d{1,2}-\\d{1,2}/,i=/(\\d|1[012])(:\\d+){0,2} *(AM|PM)/,s=/\\d{1,2}(:\\d{1,2}){1,2}/,r={\nclassName:\"literal\",variants:[{begin:n.concat(/# */,n.either(a,t),/ *#/)},{\nbegin:n.concat(/# */,s,/ *#/)},{begin:n.concat(/# */,i,/ *#/)},{\nbegin:n.concat(/# */,n.either(a,t),/ +/,n.either(i,s),/ *#/)}]\n},l=e.COMMENT(/'''/,/$/,{contains:[{className:\"doctag\",begin:/<\\/?/,end:/>/}]\n}),o=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\\t ]|^)REM(?=\\s)/}]})\n;return{name:\"Visual Basic .NET\",aliases:[\"vb\"],case_insensitive:!0,\nclassNameAliases:{label:\"symbol\"},keywords:{\nkeyword:\"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield\",\nbuilt_in:\"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort\",\ntype:\"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort\",\nliteral:\"true false nothing\"},\nillegal:\"//|\\\\{|\\\\}|endif|gosub|variant|wend|^\\\\$ \",contains:[{\nclassName:\"string\",begin:/\"(\"\"|[^/n])\"C\\b/},{className:\"string\",begin:/\"/,\nend:/\"/,illegal:/\\n/,contains:[{begin:/\"\"/}]},r,{className:\"number\",relevance:0,\nvariants:[{begin:/\\b\\d[\\d_]*((\\.[\\d_]+(E[+-]?[\\d_]+)?)|(E[+-]?[\\d_]+))[RFD@!#]?/\n},{begin:/\\b\\d[\\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\\dA-F_]+((U?[SIL])|[%&])?/},{\nbegin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{\nclassName:\"label\",begin:/^\\w+:/},l,o,{className:\"meta\",\nbegin:/[\\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\\b/,\nend:/$/,keywords:{\nkeyword:\"const disable else elseif enable end externalsource if region then\"},\ncontains:[o]}]}}})();hljs.registerLanguage(\"vbnet\",e)})();/*! `diff` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{const a=e.regex;return{name:\"Diff\",\naliases:[\"patch\"],contains:[{className:\"meta\",relevance:10,\nmatch:a.either(/^@@ +-\\d+,\\d+ +\\+\\d+,\\d+ +@@/,/^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/,/^--- +\\d+,\\d+ +----$/)\n},{className:\"comment\",variants:[{\nbegin:a.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\\*{3} /,/^\\+{3}/,/^diff --git/),\nend:/$/},{match:/^\\*{15}$/}]},{className:\"addition\",begin:/^\\+/,end:/$/},{\nclassName:\"deletion\",begin:/^-/,end:/$/},{className:\"addition\",begin:/^!/,\nend:/$/}]}}})();hljs.registerLanguage(\"diff\",e)})();/*! `scss` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\"\n;const e=[\"a\",\"abbr\",\"address\",\"article\",\"aside\",\"audio\",\"b\",\"blockquote\",\"body\",\"button\",\"canvas\",\"caption\",\"cite\",\"code\",\"dd\",\"del\",\"details\",\"dfn\",\"div\",\"dl\",\"dt\",\"em\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"html\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"label\",\"legend\",\"li\",\"main\",\"mark\",\"menu\",\"nav\",\"object\",\"ol\",\"p\",\"q\",\"quote\",\"samp\",\"section\",\"span\",\"strong\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"ul\",\"var\",\"video\"],r=[\"any-hover\",\"any-pointer\",\"aspect-ratio\",\"color\",\"color-gamut\",\"color-index\",\"device-aspect-ratio\",\"device-height\",\"device-width\",\"display-mode\",\"forced-colors\",\"grid\",\"height\",\"hover\",\"inverted-colors\",\"monochrome\",\"orientation\",\"overflow-block\",\"overflow-inline\",\"pointer\",\"prefers-color-scheme\",\"prefers-contrast\",\"prefers-reduced-motion\",\"prefers-reduced-transparency\",\"resolution\",\"scan\",\"scripting\",\"update\",\"width\",\"min-width\",\"max-width\",\"min-height\",\"max-height\"],i=[\"active\",\"any-link\",\"blank\",\"checked\",\"current\",\"default\",\"defined\",\"dir\",\"disabled\",\"drop\",\"empty\",\"enabled\",\"first\",\"first-child\",\"first-of-type\",\"fullscreen\",\"future\",\"focus\",\"focus-visible\",\"focus-within\",\"has\",\"host\",\"host-context\",\"hover\",\"indeterminate\",\"in-range\",\"invalid\",\"is\",\"lang\",\"last-child\",\"last-of-type\",\"left\",\"link\",\"local-link\",\"not\",\"nth-child\",\"nth-col\",\"nth-last-child\",\"nth-last-col\",\"nth-last-of-type\",\"nth-of-type\",\"only-child\",\"only-of-type\",\"optional\",\"out-of-range\",\"past\",\"placeholder-shown\",\"read-only\",\"read-write\",\"required\",\"right\",\"root\",\"scope\",\"target\",\"target-within\",\"user-invalid\",\"valid\",\"visited\",\"where\"],t=[\"after\",\"backdrop\",\"before\",\"cue\",\"cue-region\",\"first-letter\",\"first-line\",\"grammar-error\",\"marker\",\"part\",\"placeholder\",\"selection\",\"slotted\",\"spelling-error\"],o=[\"align-content\",\"align-items\",\"align-self\",\"all\",\"animation\",\"animation-delay\",\"animation-direction\",\"animation-duration\",\"animation-fill-mode\",\"animation-iteration-count\",\"animation-name\",\"animation-play-state\",\"animation-timing-function\",\"backface-visibility\",\"background\",\"background-attachment\",\"background-blend-mode\",\"background-clip\",\"background-color\",\"background-image\",\"background-origin\",\"background-position\",\"background-repeat\",\"background-size\",\"block-size\",\"border\",\"border-block\",\"border-block-color\",\"border-block-end\",\"border-block-end-color\",\"border-block-end-style\",\"border-block-end-width\",\"border-block-start\",\"border-block-start-color\",\"border-block-start-style\",\"border-block-start-width\",\"border-block-style\",\"border-block-width\",\"border-bottom\",\"border-bottom-color\",\"border-bottom-left-radius\",\"border-bottom-right-radius\",\"border-bottom-style\",\"border-bottom-width\",\"border-collapse\",\"border-color\",\"border-image\",\"border-image-outset\",\"border-image-repeat\",\"border-image-slice\",\"border-image-source\",\"border-image-width\",\"border-inline\",\"border-inline-color\",\"border-inline-end\",\"border-inline-end-color\",\"border-inline-end-style\",\"border-inline-end-width\",\"border-inline-start\",\"border-inline-start-color\",\"border-inline-start-style\",\"border-inline-start-width\",\"border-inline-style\",\"border-inline-width\",\"border-left\",\"border-left-color\",\"border-left-style\",\"border-left-width\",\"border-radius\",\"border-right\",\"border-right-color\",\"border-right-style\",\"border-right-width\",\"border-spacing\",\"border-style\",\"border-top\",\"border-top-color\",\"border-top-left-radius\",\"border-top-right-radius\",\"border-top-style\",\"border-top-width\",\"border-width\",\"bottom\",\"box-decoration-break\",\"box-shadow\",\"box-sizing\",\"break-after\",\"break-before\",\"break-inside\",\"caption-side\",\"caret-color\",\"clear\",\"clip\",\"clip-path\",\"clip-rule\",\"color\",\"column-count\",\"column-fill\",\"column-gap\",\"column-rule\",\"column-rule-color\",\"column-rule-style\",\"column-rule-width\",\"column-span\",\"column-width\",\"columns\",\"contain\",\"content\",\"content-visibility\",\"counter-increment\",\"counter-reset\",\"cue\",\"cue-after\",\"cue-before\",\"cursor\",\"direction\",\"display\",\"empty-cells\",\"filter\",\"flex\",\"flex-basis\",\"flex-direction\",\"flex-flow\",\"flex-grow\",\"flex-shrink\",\"flex-wrap\",\"float\",\"flow\",\"font\",\"font-display\",\"font-family\",\"font-feature-settings\",\"font-kerning\",\"font-language-override\",\"font-size\",\"font-size-adjust\",\"font-smoothing\",\"font-stretch\",\"font-style\",\"font-synthesis\",\"font-variant\",\"font-variant-caps\",\"font-variant-east-asian\",\"font-variant-ligatures\",\"font-variant-numeric\",\"font-variant-position\",\"font-variation-settings\",\"font-weight\",\"gap\",\"glyph-orientation-vertical\",\"grid\",\"grid-area\",\"grid-auto-columns\",\"grid-auto-flow\",\"grid-auto-rows\",\"grid-column\",\"grid-column-end\",\"grid-column-start\",\"grid-gap\",\"grid-row\",\"grid-row-end\",\"grid-row-start\",\"grid-template\",\"grid-template-areas\",\"grid-template-columns\",\"grid-template-rows\",\"hanging-punctuation\",\"height\",\"hyphens\",\"icon\",\"image-orientation\",\"image-rendering\",\"image-resolution\",\"ime-mode\",\"inline-size\",\"isolation\",\"justify-content\",\"left\",\"letter-spacing\",\"line-break\",\"line-height\",\"list-style\",\"list-style-image\",\"list-style-position\",\"list-style-type\",\"margin\",\"margin-block\",\"margin-block-end\",\"margin-block-start\",\"margin-bottom\",\"margin-inline\",\"margin-inline-end\",\"margin-inline-start\",\"margin-left\",\"margin-right\",\"margin-top\",\"marks\",\"mask\",\"mask-border\",\"mask-border-mode\",\"mask-border-outset\",\"mask-border-repeat\",\"mask-border-slice\",\"mask-border-source\",\"mask-border-width\",\"mask-clip\",\"mask-composite\",\"mask-image\",\"mask-mode\",\"mask-origin\",\"mask-position\",\"mask-repeat\",\"mask-size\",\"mask-type\",\"max-block-size\",\"max-height\",\"max-inline-size\",\"max-width\",\"min-block-size\",\"min-height\",\"min-inline-size\",\"min-width\",\"mix-blend-mode\",\"nav-down\",\"nav-index\",\"nav-left\",\"nav-right\",\"nav-up\",\"none\",\"normal\",\"object-fit\",\"object-position\",\"opacity\",\"order\",\"orphans\",\"outline\",\"outline-color\",\"outline-offset\",\"outline-style\",\"outline-width\",\"overflow\",\"overflow-wrap\",\"overflow-x\",\"overflow-y\",\"padding\",\"padding-block\",\"padding-block-end\",\"padding-block-start\",\"padding-bottom\",\"padding-inline\",\"padding-inline-end\",\"padding-inline-start\",\"padding-left\",\"padding-right\",\"padding-top\",\"page-break-after\",\"page-break-before\",\"page-break-inside\",\"pause\",\"pause-after\",\"pause-before\",\"perspective\",\"perspective-origin\",\"pointer-events\",\"position\",\"quotes\",\"resize\",\"rest\",\"rest-after\",\"rest-before\",\"right\",\"row-gap\",\"scroll-margin\",\"scroll-margin-block\",\"scroll-margin-block-end\",\"scroll-margin-block-start\",\"scroll-margin-bottom\",\"scroll-margin-inline\",\"scroll-margin-inline-end\",\"scroll-margin-inline-start\",\"scroll-margin-left\",\"scroll-margin-right\",\"scroll-margin-top\",\"scroll-padding\",\"scroll-padding-block\",\"scroll-padding-block-end\",\"scroll-padding-block-start\",\"scroll-padding-bottom\",\"scroll-padding-inline\",\"scroll-padding-inline-end\",\"scroll-padding-inline-start\",\"scroll-padding-left\",\"scroll-padding-right\",\"scroll-padding-top\",\"scroll-snap-align\",\"scroll-snap-stop\",\"scroll-snap-type\",\"scrollbar-color\",\"scrollbar-gutter\",\"scrollbar-width\",\"shape-image-threshold\",\"shape-margin\",\"shape-outside\",\"speak\",\"speak-as\",\"src\",\"tab-size\",\"table-layout\",\"text-align\",\"text-align-all\",\"text-align-last\",\"text-combine-upright\",\"text-decoration\",\"text-decoration-color\",\"text-decoration-line\",\"text-decoration-style\",\"text-emphasis\",\"text-emphasis-color\",\"text-emphasis-position\",\"text-emphasis-style\",\"text-indent\",\"text-justify\",\"text-orientation\",\"text-overflow\",\"text-rendering\",\"text-shadow\",\"text-transform\",\"text-underline-position\",\"top\",\"transform\",\"transform-box\",\"transform-origin\",\"transform-style\",\"transition\",\"transition-delay\",\"transition-duration\",\"transition-property\",\"transition-timing-function\",\"unicode-bidi\",\"vertical-align\",\"visibility\",\"voice-balance\",\"voice-duration\",\"voice-family\",\"voice-pitch\",\"voice-range\",\"voice-rate\",\"voice-stress\",\"voice-volume\",\"white-space\",\"widows\",\"width\",\"will-change\",\"word-break\",\"word-spacing\",\"word-wrap\",\"writing-mode\",\"z-index\"].reverse()\n;return n=>{const a=(e=>({IMPORTANT:{scope:\"meta\",begin:\"!important\"},\nBLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:\"number\",\nbegin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/},FUNCTION_DISPATCH:{\nclassName:\"built_in\",begin:/[\\w-]+(?=\\()/},ATTRIBUTE_SELECTOR_MODE:{\nscope:\"selector-attr\",begin:/\\[/,end:/\\]/,illegal:\"$\",\ncontains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{\nscope:\"number\",\nbegin:e.NUMBER_RE+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",\nrelevance:0},CSS_VARIABLE:{className:\"attr\",begin:/--[A-Za-z][A-Za-z0-9_-]*/}\n}))(n),l=t,s=i,d=\"@[a-z-]+\",c={className:\"variable\",\nbegin:\"(\\\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\\\b\",relevance:0};return{name:\"SCSS\",\ncase_insensitive:!0,illegal:\"[=/|']\",\ncontains:[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE,a.CSS_NUMBER_MODE,{\nclassName:\"selector-id\",begin:\"#[A-Za-z0-9_-]+\",relevance:0},{\nclassName:\"selector-class\",begin:\"\\\\.[A-Za-z0-9_-]+\",relevance:0\n},a.ATTRIBUTE_SELECTOR_MODE,{className:\"selector-tag\",\nbegin:\"\\\\b(\"+e.join(\"|\")+\")\\\\b\",relevance:0},{className:\"selector-pseudo\",\nbegin:\":(\"+s.join(\"|\")+\")\"},{className:\"selector-pseudo\",\nbegin:\":(:)?(\"+l.join(\"|\")+\")\"},c,{begin:/\\(/,end:/\\)/,\ncontains:[a.CSS_NUMBER_MODE]},a.CSS_VARIABLE,{className:\"attribute\",\nbegin:\"\\\\b(\"+o.join(\"|\")+\")\\\\b\"},{\nbegin:\"\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b\"\n},{begin:/:/,end:/[;}{]/,relevance:0,\ncontains:[a.BLOCK_COMMENT,c,a.HEXCOLOR,a.CSS_NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,a.IMPORTANT,a.FUNCTION_DISPATCH]\n},{begin:\"@(page|font-face)\",keywords:{$pattern:d,keyword:\"@page @font-face\"}},{\nbegin:\"@\",end:\"[{;]\",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,\nkeyword:\"and or not only\",attribute:r.join(\" \")},contains:[{begin:d,\nclassName:\"keyword\"},{begin:/[a-z-]+(?=:)/,className:\"attribute\"\n},c,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,a.HEXCOLOR,a.CSS_NUMBER_MODE]\n},a.FUNCTION_DISPATCH]}}})();hljs.registerLanguage(\"scss\",e)})();/*! `python-repl` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var a=(()=>{\"use strict\";return a=>({aliases:[\"pycon\"],contains:[{\nclassName:\"meta.prompt\",starts:{end:/ |$/,starts:{end:\"$\",subLanguage:\"python\"}\n},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\\.\\.\\.(?=[ ]|$)/}]}]})})()\n;hljs.registerLanguage(\"python-repl\",a)})();/*! `swift` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";function e(e){\nreturn e?\"string\"==typeof e?e:e.source:null}function a(e){return t(\"(?=\",e,\")\")}\nfunction t(...a){return a.map((a=>e(a))).join(\"\")}function n(...a){const t=(e=>{\nconst a=e[e.length-1]\n;return\"object\"==typeof a&&a.constructor===Object?(e.splice(e.length-1,1),a):{}\n})(a);return\"(\"+(t.capture?\"\":\"?:\")+a.map((a=>e(a))).join(\"|\")+\")\"}\nconst i=e=>t(/\\b/,e,/\\w$/.test(e)?/\\b/:/\\B/),s=[\"Protocol\",\"Type\"].map(i),u=[\"init\",\"self\"].map(i),c=[\"Any\",\"Self\"],r=[\"actor\",\"any\",\"associatedtype\",\"async\",\"await\",/as\\?/,/as!/,\"as\",\"break\",\"case\",\"catch\",\"class\",\"continue\",\"convenience\",\"default\",\"defer\",\"deinit\",\"didSet\",\"distributed\",\"do\",\"dynamic\",\"else\",\"enum\",\"extension\",\"fallthrough\",/fileprivate\\(set\\)/,\"fileprivate\",\"final\",\"for\",\"func\",\"get\",\"guard\",\"if\",\"import\",\"indirect\",\"infix\",/init\\?/,/init!/,\"inout\",/internal\\(set\\)/,\"internal\",\"in\",\"is\",\"isolated\",\"nonisolated\",\"lazy\",\"let\",\"mutating\",\"nonmutating\",/open\\(set\\)/,\"open\",\"operator\",\"optional\",\"override\",\"postfix\",\"precedencegroup\",\"prefix\",/private\\(set\\)/,\"private\",\"protocol\",/public\\(set\\)/,\"public\",\"repeat\",\"required\",\"rethrows\",\"return\",\"set\",\"some\",\"static\",\"struct\",\"subscript\",\"super\",\"switch\",\"throws\",\"throw\",/try\\?/,/try!/,\"try\",\"typealias\",/unowned\\(safe\\)/,/unowned\\(unsafe\\)/,\"unowned\",\"var\",\"weak\",\"where\",\"while\",\"willSet\"],o=[\"false\",\"nil\",\"true\"],l=[\"assignment\",\"associativity\",\"higherThan\",\"left\",\"lowerThan\",\"none\",\"right\"],m=[\"#colorLiteral\",\"#column\",\"#dsohandle\",\"#else\",\"#elseif\",\"#endif\",\"#error\",\"#file\",\"#fileID\",\"#fileLiteral\",\"#filePath\",\"#function\",\"#if\",\"#imageLiteral\",\"#keyPath\",\"#line\",\"#selector\",\"#sourceLocation\",\"#warn_unqualified_access\",\"#warning\"],p=[\"abs\",\"all\",\"any\",\"assert\",\"assertionFailure\",\"debugPrint\",\"dump\",\"fatalError\",\"getVaList\",\"isKnownUniquelyReferenced\",\"max\",\"min\",\"numericCast\",\"pointwiseMax\",\"pointwiseMin\",\"precondition\",\"preconditionFailure\",\"print\",\"readLine\",\"repeatElement\",\"sequence\",\"stride\",\"swap\",\"swift_unboxFromSwiftValueWithType\",\"transcode\",\"type\",\"unsafeBitCast\",\"unsafeDowncast\",\"withExtendedLifetime\",\"withUnsafeMutablePointer\",\"withUnsafePointer\",\"withVaList\",\"withoutActuallyEscaping\",\"zip\"],d=n(/[/=\\-+!*%<>&|^~?]/,/[\\u00A1-\\u00A7]/,/[\\u00A9\\u00AB]/,/[\\u00AC\\u00AE]/,/[\\u00B0\\u00B1]/,/[\\u00B6\\u00BB\\u00BF\\u00D7\\u00F7]/,/[\\u2016-\\u2017]/,/[\\u2020-\\u2027]/,/[\\u2030-\\u203E]/,/[\\u2041-\\u2053]/,/[\\u2055-\\u205E]/,/[\\u2190-\\u23FF]/,/[\\u2500-\\u2775]/,/[\\u2794-\\u2BFF]/,/[\\u2E00-\\u2E7F]/,/[\\u3001-\\u3003]/,/[\\u3008-\\u3020]/,/[\\u3030]/),F=n(d,/[\\u0300-\\u036F]/,/[\\u1DC0-\\u1DFF]/,/[\\u20D0-\\u20FF]/,/[\\uFE00-\\uFE0F]/,/[\\uFE20-\\uFE2F]/),b=t(d,F,\"*\"),h=n(/[a-zA-Z_]/,/[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]/,/[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]/,/[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]/,/[\\u1E00-\\u1FFF]/,/[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]/,/[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]/,/[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]/,/[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]/,/[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]/,/[\\uFE47-\\uFEFE\\uFF00-\\uFFFD]/),f=n(h,/\\d/,/[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F]/),w=t(h,f,\"*\"),y=t(/[A-Z]/,f,\"*\"),g=[\"autoclosure\",t(/convention\\(/,n(\"swift\",\"block\",\"c\"),/\\)/),\"discardableResult\",\"dynamicCallable\",\"dynamicMemberLookup\",\"escaping\",\"frozen\",\"GKInspectable\",\"IBAction\",\"IBDesignable\",\"IBInspectable\",\"IBOutlet\",\"IBSegueAction\",\"inlinable\",\"main\",\"nonobjc\",\"NSApplicationMain\",\"NSCopying\",\"NSManaged\",t(/objc\\(/,w,/\\)/),\"objc\",\"objcMembers\",\"propertyWrapper\",\"requires_stored_property_inits\",\"resultBuilder\",\"testable\",\"UIApplicationMain\",\"unknown\",\"usableFromInline\"],E=[\"iOS\",\"iOSApplicationExtension\",\"macOS\",\"macOSApplicationExtension\",\"macCatalyst\",\"macCatalystApplicationExtension\",\"watchOS\",\"watchOSApplicationExtension\",\"tvOS\",\"tvOSApplicationExtension\",\"swift\"]\n;return e=>{const d={match:/\\s+/,relevance:0},h=e.COMMENT(\"/\\\\*\",\"\\\\*/\",{\ncontains:[\"self\"]}),v=[e.C_LINE_COMMENT_MODE,h],A={match:[/\\./,n(...s,...u)],\nclassName:{2:\"keyword\"}},N={match:t(/\\./,n(...r)),relevance:0\n},C=r.filter((e=>\"string\"==typeof e)).concat([\"_|0\"]),D={variants:[{\nclassName:\"keyword\",\nmatch:n(...r.filter((e=>\"string\"!=typeof e)).concat(c).map(i),...u)}]},k={\n$pattern:n(/\\b\\w+/,/#\\w+/),keyword:C.concat(m),literal:o},B=[A,N,D],_=[{\nmatch:t(/\\./,n(...p)),relevance:0},{className:\"built_in\",\nmatch:t(/\\b/,n(...p),/(?=\\()/)}],S={match:/->/,relevance:0},M=[S,{\nclassName:\"operator\",relevance:0,variants:[{match:b},{match:`\\\\.(\\\\.|${F})+`}]\n}],x=\"([0-9a-fA-F]_*)+\",I={className:\"number\",relevance:0,variants:[{\nmatch:\"\\\\b(([0-9]_*)+)(\\\\.(([0-9]_*)+))?([eE][+-]?(([0-9]_*)+))?\\\\b\"},{\nmatch:`\\\\b0x(${x})(\\\\.(${x}))?([pP][+-]?(([0-9]_*)+))?\\\\b`},{\nmatch:/\\b0o([0-7]_*)+\\b/},{match:/\\b0b([01]_*)+\\b/}]},L=(e=\"\")=>({\nclassName:\"subst\",variants:[{match:t(/\\\\/,e,/[0\\\\tnr\"']/)},{\nmatch:t(/\\\\/,e,/u\\{[0-9a-fA-F]{1,8}\\}/)}]}),O=(e=\"\")=>({className:\"subst\",\nmatch:t(/\\\\/,e,/[\\t ]*(?:[\\r\\n]|\\r\\n)/)}),T=(e=\"\")=>({className:\"subst\",\nlabel:\"interpol\",begin:t(/\\\\/,e,/\\(/),end:/\\)/}),$=(e=\"\")=>({begin:t(e,/\"\"\"/),\nend:t(/\"\"\"/,e),contains:[L(e),O(e),T(e)]}),j=(e=\"\")=>({begin:t(e,/\"/),\nend:t(/\"/,e),contains:[L(e),T(e)]}),P={className:\"string\",\nvariants:[$(),$(\"#\"),$(\"##\"),$(\"###\"),j(),j(\"#\"),j(\"##\"),j(\"###\")]},K={\nmatch:t(/`/,w,/`/)},z=[K,{className:\"variable\",match:/\\$\\d+/},{\nclassName:\"variable\",match:`\\\\$${f}+`}],q=[{match:/(@|#(un)?)available/,\nclassName:\"keyword\",starts:{contains:[{begin:/\\(/,end:/\\)/,keywords:E,\ncontains:[...M,I,P]}]}},{className:\"keyword\",match:t(/@/,n(...g))},{\nclassName:\"meta\",match:t(/@/,w)}],U={match:a(/\\b[A-Z]/),relevance:0,contains:[{\nclassName:\"type\",\nmatch:t(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,f,\"+\")\n},{className:\"type\",match:y,relevance:0},{match:/[?!]+/,relevance:0},{\nmatch:/\\.\\.\\./,relevance:0},{match:t(/\\s+&\\s+/,a(y)),relevance:0}]},Z={\nbegin://,keywords:k,contains:[...v,...B,...q,S,U]};U.contains.push(Z)\n;const V={begin:/\\(/,end:/\\)/,relevance:0,keywords:k,contains:[\"self\",{\nmatch:t(w,/\\s*:/),keywords:\"_|0\",relevance:0\n},...v,...B,..._,...M,I,P,...z,...q,U]},W={begin://,contains:[...v,U]\n},G={begin:/\\(/,end:/\\)/,keywords:k,contains:[{\nbegin:n(a(t(w,/\\s*:/)),a(t(w,/\\s+/,w,/\\s*:/))),end:/:/,relevance:0,contains:[{\nclassName:\"keyword\",match:/\\b_\\b/},{className:\"params\",match:w}]\n},...v,...B,...M,I,P,...q,U,V],endsParent:!0,illegal:/[\"']/},R={\nmatch:[/func/,/\\s+/,n(K.match,w,b)],className:{1:\"keyword\",3:\"title.function\"},\ncontains:[W,G,d],illegal:[/\\[/,/%/]},X={\nmatch:[/\\b(?:subscript|init[?!]?)/,/\\s*(?=[<(])/],className:{1:\"keyword\"},\ncontains:[W,G,d],illegal:/\\[|%/},H={match:[/operator/,/\\s+/,b],className:{\n1:\"keyword\",3:\"title\"}},J={begin:[/precedencegroup/,/\\s+/,y],className:{\n1:\"keyword\",3:\"title\"},contains:[U],keywords:[...l,...o],end:/}/}\n;for(const e of P.variants){const a=e.contains.find((e=>\"interpol\"===e.label))\n;a.keywords=k;const t=[...B,..._,...M,I,P,...z];a.contains=[...t,{begin:/\\(/,\nend:/\\)/,contains:[\"self\",...t]}]}return{name:\"Swift\",keywords:k,\ncontains:[...v,R,X,{beginKeywords:\"struct protocol class extension enum actor\",\nend:\"\\\\{\",excludeEnd:!0,keywords:k,contains:[e.inherit(e.TITLE_MODE,{\nclassName:\"title.class\",begin:/[A-Za-z$_][\\u00C0-\\u02B80-9A-Za-z$_]*/}),...B]\n},H,J,{beginKeywords:\"import\",end:/$/,contains:[...v],relevance:0\n},...B,..._,...M,I,P,...z,...q,U,V]}}})();hljs.registerLanguage(\"swift\",e)})();/*! `yaml` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{\nconst n=\"true false yes no null\",a=\"[\\\\w#;/?:@&=+$,.~*'()[\\\\]]+\",s={\nclassName:\"string\",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/\"/,end:/\"/\n},{begin:/\\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:\"template-variable\",\nvariants:[{begin:/\\{\\{/,end:/\\}\\}/},{begin:/%\\{/,end:/\\}/}]}]},i=e.inherit(s,{\nvariants:[{begin:/'/,end:/'/},{begin:/\"/,end:/\"/},{begin:/[^\\s,{}[\\]]+/}]}),l={\nend:\",\",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},t={begin:/\\{/,\nend:/\\}/,contains:[l],illegal:\"\\\\n\",relevance:0},g={begin:\"\\\\[\",end:\"\\\\]\",\ncontains:[l],illegal:\"\\\\n\",relevance:0},b=[{className:\"attr\",variants:[{\nbegin:\"\\\\w[\\\\w :\\\\/.-]*:(?=[ \\t]|$)\"},{begin:'\"\\\\w[\\\\w :\\\\/.-]*\":(?=[ \\t]|$)'},{\nbegin:\"'\\\\w[\\\\w :\\\\/.-]*':(?=[ \\t]|$)\"}]},{className:\"meta\",begin:\"^---\\\\s*$\",\nrelevance:10},{className:\"string\",\nbegin:\"[\\\\|>]([1-9]?[+-])?[ ]*\\\\n( +)[^ ][^\\\\n]*\\\\n(\\\\2[^\\\\n]+\\\\n?)*\"},{\nbegin:\"<%[%=-]?\",end:\"[%-]?%>\",subLanguage:\"ruby\",excludeBegin:!0,excludeEnd:!0,\nrelevance:0},{className:\"type\",begin:\"!\\\\w+!\"+a},{className:\"type\",\nbegin:\"!<\"+a+\">\"},{className:\"type\",begin:\"!\"+a},{className:\"type\",begin:\"!!\"+a\n},{className:\"meta\",begin:\"&\"+e.UNDERSCORE_IDENT_RE+\"$\"},{className:\"meta\",\nbegin:\"\\\\*\"+e.UNDERSCORE_IDENT_RE+\"$\"},{className:\"bullet\",begin:\"-(?=[ ]|$)\",\nrelevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{\nclassName:\"number\",\nbegin:\"\\\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\\\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\\\.[0-9]*)?([ \\\\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\\\b\"\n},{className:\"number\",begin:e.C_NUMBER_RE+\"\\\\b\",relevance:0},t,g,s],r=[...b]\n;return r.pop(),r.push(i),l.contains=r,{name:\"YAML\",case_insensitive:!0,\naliases:[\"yml\"],contains:b}}})();hljs.registerLanguage(\"yaml\",e)})();/*! `json` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{const a=[\"true\",\"false\",\"null\"],n={\nscope:\"literal\",beginKeywords:a.join(\" \")};return{name:\"JSON\",keywords:{\nliteral:a},contains:[{className:\"attr\",begin:/\"(\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\nrelevance:1.01},{match:/[{}[\\],:]/,className:\"punctuation\",relevance:0\n},e.QUOTE_STRING_MODE,n,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],\nillegal:\"\\\\S\"}}})();hljs.registerLanguage(\"json\",e)})();/*! `java` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\"\n;var e=\"\\\\.([0-9](_*[0-9])*)\",a=\"[0-9a-fA-F](_*[0-9a-fA-F])*\",n={\nclassName:\"number\",variants:[{\nbegin:`(\\\\b([0-9](_*[0-9])*)((${e})|\\\\.)?|(${e}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\\\b`\n},{begin:`\\\\b([0-9](_*[0-9])*)((${e})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)`},{\nbegin:`(${e})[fFdD]?\\\\b`},{begin:\"\\\\b([0-9](_*[0-9])*)[fFdD]\\\\b\"},{\nbegin:`\\\\b0[xX]((${a})\\\\.?|(${a})?\\\\.(${a}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\\\b`\n},{begin:\"\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b\"},{begin:`\\\\b0[xX](${a})[lL]?\\\\b`},{\nbegin:\"\\\\b0(_*[0-7])*[lL]?\\\\b\"},{begin:\"\\\\b0[bB][01](_*[01])*[lL]?\\\\b\"}],\nrelevance:0};function s(e,a,n){return-1===n?\"\":e.replace(a,(t=>s(e,a,n-1)))}\nreturn e=>{\nconst a=e.regex,t=\"[\\xc0-\\u02b8a-zA-Z_$][\\xc0-\\u02b8a-zA-Z_$0-9]*\",i=t+s(\"(?:<\"+t+\"~~~(?:\\\\s*,\\\\s*\"+t+\"~~~)*>)?\",/~~~/g,2),r={\nkeyword:[\"synchronized\",\"abstract\",\"private\",\"var\",\"static\",\"if\",\"const \",\"for\",\"while\",\"strictfp\",\"finally\",\"protected\",\"import\",\"native\",\"final\",\"void\",\"enum\",\"else\",\"break\",\"transient\",\"catch\",\"instanceof\",\"volatile\",\"case\",\"assert\",\"package\",\"default\",\"public\",\"try\",\"switch\",\"continue\",\"throws\",\"protected\",\"public\",\"private\",\"module\",\"requires\",\"exports\",\"do\",\"sealed\",\"yield\",\"permits\"],\nliteral:[\"false\",\"true\",\"null\"],\ntype:[\"char\",\"boolean\",\"long\",\"float\",\"int\",\"byte\",\"short\",\"double\"],\nbuilt_in:[\"super\",\"this\"]},l={className:\"meta\",begin:\"@\"+t,contains:[{\nbegin:/\\(/,end:/\\)/,contains:[\"self\"]}]},c={className:\"params\",begin:/\\(/,\nend:/\\)/,keywords:r,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0}\n;return{name:\"Java\",aliases:[\"jsp\"],keywords:r,illegal:/<\\/|#/,\ncontains:[e.COMMENT(\"/\\\\*\\\\*\",\"\\\\*/\",{relevance:0,contains:[{begin:/\\w+@/,\nrelevance:0},{className:\"doctag\",begin:\"@[A-Za-z]+\"}]}),{\nbegin:/import java\\.[a-z]+\\./,keywords:\"import\",relevance:2\n},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/\"\"\"/,end:/\"\"\"/,\nclassName:\"string\",contains:[e.BACKSLASH_ESCAPE]\n},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{\nmatch:[/\\b(?:class|interface|enum|extends|implements|new)/,/\\s+/,t],className:{\n1:\"keyword\",3:\"title.class\"}},{match:/non-sealed/,scope:\"keyword\"},{\nbegin:[a.concat(/(?!else)/,t),/\\s+/,t,/\\s+/,/=(?!=)/],className:{1:\"type\",\n3:\"variable\",5:\"operator\"}},{begin:[/record/,/\\s+/,t],className:{1:\"keyword\",\n3:\"title.class\"},contains:[c,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{\nbeginKeywords:\"new throw return else\",relevance:0},{\nbegin:[\"(?:\"+i+\"\\\\s+)\",e.UNDERSCORE_IDENT_RE,/\\s*(?=\\()/],className:{\n2:\"title.function\"},keywords:r,contains:[{className:\"params\",begin:/\\(/,\nend:/\\)/,keywords:r,relevance:0,\ncontains:[l,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,n,e.C_BLOCK_COMMENT_MODE]\n},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},n,l]}}})()\n;hljs.registerLanguage(\"java\",e)})();/*! `kotlin` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\"\n;var e=\"\\\\.([0-9](_*[0-9])*)\",n=\"[0-9a-fA-F](_*[0-9a-fA-F])*\",a={\nclassName:\"number\",variants:[{\nbegin:`(\\\\b([0-9](_*[0-9])*)((${e})|\\\\.)?|(${e}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\\\b`\n},{begin:`\\\\b([0-9](_*[0-9])*)((${e})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)`},{\nbegin:`(${e})[fFdD]?\\\\b`},{begin:\"\\\\b([0-9](_*[0-9])*)[fFdD]\\\\b\"},{\nbegin:`\\\\b0[xX]((${n})\\\\.?|(${n})?\\\\.(${n}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\\\b`\n},{begin:\"\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b\"},{begin:`\\\\b0[xX](${n})[lL]?\\\\b`},{\nbegin:\"\\\\b0(_*[0-7])*[lL]?\\\\b\"},{begin:\"\\\\b0[bB][01](_*[01])*[lL]?\\\\b\"}],\nrelevance:0};return e=>{const n={\nkeyword:\"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual\",\nbuilt_in:\"Byte Short Char Int Long Boolean Float Double Void Unit Nothing\",\nliteral:\"true false null\"},i={className:\"symbol\",begin:e.UNDERSCORE_IDENT_RE+\"@\"\n},s={className:\"subst\",begin:/\\$\\{/,end:/\\}/,contains:[e.C_NUMBER_MODE]},t={\nclassName:\"variable\",begin:\"\\\\$\"+e.UNDERSCORE_IDENT_RE},r={className:\"string\",\nvariants:[{begin:'\"\"\"',end:'\"\"\"(?=[^\"])',contains:[t,s]},{begin:\"'\",end:\"'\",\nillegal:/\\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'\"',end:'\"',illegal:/\\n/,\ncontains:[e.BACKSLASH_ESCAPE,t,s]}]};s.contains.push(r);const l={\nclassName:\"meta\",\nbegin:\"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\\\s*:(?:\\\\s*\"+e.UNDERSCORE_IDENT_RE+\")?\"\n},c={className:\"meta\",begin:\"@\"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\\(/,\nend:/\\)/,contains:[e.inherit(r,{className:\"string\"}),\"self\"]}]\n},o=a,b=e.COMMENT(\"/\\\\*\",\"\\\\*/\",{contains:[e.C_BLOCK_COMMENT_MODE]}),E={\nvariants:[{className:\"type\",begin:e.UNDERSCORE_IDENT_RE},{begin:/\\(/,end:/\\)/,\ncontains:[]}]},d=E;return d.variants[1].contains=[E],E.variants[1].contains=[d],\n{name:\"Kotlin\",aliases:[\"kt\",\"kts\"],keywords:n,\ncontains:[e.COMMENT(\"/\\\\*\\\\*\",\"\\\\*/\",{relevance:0,contains:[{className:\"doctag\",\nbegin:\"@[A-Za-z]+\"}]}),e.C_LINE_COMMENT_MODE,b,{className:\"keyword\",\nbegin:/\\b(break|continue|return|this)\\b/,starts:{contains:[{className:\"symbol\",\nbegin:/@\\w+/}]}},i,l,c,{className:\"function\",beginKeywords:\"fun\",end:\"[(]|$\",\nreturnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{\nbegin:e.UNDERSCORE_IDENT_RE+\"\\\\s*\\\\(\",returnBegin:!0,relevance:0,\ncontains:[e.UNDERSCORE_TITLE_MODE]},{className:\"type\",begin://,\nkeywords:\"reified\",relevance:0},{className:\"params\",begin:/\\(/,end:/\\)/,\nendsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\\/]/,\nendsWithParent:!0,contains:[E,e.C_LINE_COMMENT_MODE,b],relevance:0\n},e.C_LINE_COMMENT_MODE,b,l,c,r,e.C_NUMBER_MODE]},b]},{\nbegin:[/class|interface|trait/,/\\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{\n3:\"title.class\"},keywords:\"class interface trait\",end:/[:\\{(]|$/,excludeEnd:!0,\nillegal:\"extends implements\",contains:[{\nbeginKeywords:\"public protected internal private constructor\"\n},e.UNDERSCORE_TITLE_MODE,{className:\"type\",begin://,excludeBegin:!0,\nexcludeEnd:!0,relevance:0},{className:\"type\",begin:/[,:]\\s*/,end:/[<\\(,){\\s]|$/,\nexcludeBegin:!0,returnEnd:!0},l,c]},r,{className:\"meta\",begin:\"^#!/usr/bin/env\",\nend:\"$\",illegal:\"\\n\"},o]}}})();hljs.registerLanguage(\"kotlin\",e)})();/*! `makefile` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{const i={className:\"variable\",\nvariants:[{begin:\"\\\\$\\\\(\"+e.UNDERSCORE_IDENT_RE+\"\\\\)\",\ncontains:[e.BACKSLASH_ESCAPE]},{begin:/\\$[@%{var e=(()=>{\"use strict\";return e=>{const t=e.regex,a=e.COMMENT(\"//\",\"$\",{\ncontains:[{begin:/\\\\\\n/}]\n}),n=\"[a-zA-Z_]\\\\w*::\",r=\"(?!struct)(decltype\\\\(auto\\\\)|\"+t.optional(n)+\"[a-zA-Z_]\\\\w*\"+t.optional(\"<[^<>]+>\")+\")\",i={\nclassName:\"type\",begin:\"\\\\b[a-z\\\\d_]*_t\\\\b\"},s={className:\"string\",variants:[{\nbegin:'(u8?|U|L)?\"',end:'\"',illegal:\"\\\\n\",contains:[e.BACKSLASH_ESCAPE]},{\nbegin:\"(u8?|U|L)?'(\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)|.)\",\nend:\"'\",illegal:\".\"},e.END_SAME_AS_BEGIN({\nbegin:/(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,end:/\\)([^()\\\\ ]{0,16})\"/})]},c={\nclassName:\"number\",variants:[{begin:\"\\\\b(0b[01']+)\"},{\nbegin:\"(-?)\\\\b([\\\\d']+(\\\\.[\\\\d']*)?|\\\\.[\\\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)\"\n},{\nbegin:\"(-?)(\\\\b0[xX][a-fA-F0-9']+|(\\\\b[\\\\d']+(\\\\.[\\\\d']*)?|\\\\.[\\\\d']+)([eE][-+]?[\\\\d']+)?)\"\n}],relevance:0},o={className:\"meta\",begin:/#\\s*[a-z]+\\b/,end:/$/,keywords:{\nkeyword:\"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include\"\n},contains:[{begin:/\\\\\\n/,relevance:0},e.inherit(s,{className:\"string\"}),{\nclassName:\"string\",begin:/<.*?>/},a,e.C_BLOCK_COMMENT_MODE]},l={\nclassName:\"title\",begin:t.optional(n)+e.IDENT_RE,relevance:0\n},d=t.optional(n)+e.IDENT_RE+\"\\\\s*\\\\(\",u={\ntype:[\"bool\",\"char\",\"char16_t\",\"char32_t\",\"char8_t\",\"double\",\"float\",\"int\",\"long\",\"short\",\"void\",\"wchar_t\",\"unsigned\",\"signed\",\"const\",\"static\"],\nkeyword:[\"alignas\",\"alignof\",\"and\",\"and_eq\",\"asm\",\"atomic_cancel\",\"atomic_commit\",\"atomic_noexcept\",\"auto\",\"bitand\",\"bitor\",\"break\",\"case\",\"catch\",\"class\",\"co_await\",\"co_return\",\"co_yield\",\"compl\",\"concept\",\"const_cast|10\",\"consteval\",\"constexpr\",\"constinit\",\"continue\",\"decltype\",\"default\",\"delete\",\"do\",\"dynamic_cast|10\",\"else\",\"enum\",\"explicit\",\"export\",\"extern\",\"false\",\"final\",\"for\",\"friend\",\"goto\",\"if\",\"import\",\"inline\",\"module\",\"mutable\",\"namespace\",\"new\",\"noexcept\",\"not\",\"not_eq\",\"nullptr\",\"operator\",\"or\",\"or_eq\",\"override\",\"private\",\"protected\",\"public\",\"reflexpr\",\"register\",\"reinterpret_cast|10\",\"requires\",\"return\",\"sizeof\",\"static_assert\",\"static_cast|10\",\"struct\",\"switch\",\"synchronized\",\"template\",\"this\",\"thread_local\",\"throw\",\"transaction_safe\",\"transaction_safe_dynamic\",\"true\",\"try\",\"typedef\",\"typeid\",\"typename\",\"union\",\"using\",\"virtual\",\"volatile\",\"while\",\"xor\",\"xor_eq\"],\nliteral:[\"NULL\",\"false\",\"nullopt\",\"nullptr\",\"true\"],built_in:[\"_Pragma\"],\n_type_hints:[\"any\",\"auto_ptr\",\"barrier\",\"binary_semaphore\",\"bitset\",\"complex\",\"condition_variable\",\"condition_variable_any\",\"counting_semaphore\",\"deque\",\"false_type\",\"future\",\"imaginary\",\"initializer_list\",\"istringstream\",\"jthread\",\"latch\",\"lock_guard\",\"multimap\",\"multiset\",\"mutex\",\"optional\",\"ostringstream\",\"packaged_task\",\"pair\",\"promise\",\"priority_queue\",\"queue\",\"recursive_mutex\",\"recursive_timed_mutex\",\"scoped_lock\",\"set\",\"shared_future\",\"shared_lock\",\"shared_mutex\",\"shared_timed_mutex\",\"shared_ptr\",\"stack\",\"string_view\",\"stringstream\",\"timed_mutex\",\"thread\",\"true_type\",\"tuple\",\"unique_lock\",\"unique_ptr\",\"unordered_map\",\"unordered_multimap\",\"unordered_multiset\",\"unordered_set\",\"variant\",\"vector\",\"weak_ptr\",\"wstring\",\"wstring_view\"]\n},p={className:\"function.dispatch\",relevance:0,keywords:{\n_hint:[\"abort\",\"abs\",\"acos\",\"apply\",\"as_const\",\"asin\",\"atan\",\"atan2\",\"calloc\",\"ceil\",\"cerr\",\"cin\",\"clog\",\"cos\",\"cosh\",\"cout\",\"declval\",\"endl\",\"exchange\",\"exit\",\"exp\",\"fabs\",\"floor\",\"fmod\",\"forward\",\"fprintf\",\"fputs\",\"free\",\"frexp\",\"fscanf\",\"future\",\"invoke\",\"isalnum\",\"isalpha\",\"iscntrl\",\"isdigit\",\"isgraph\",\"islower\",\"isprint\",\"ispunct\",\"isspace\",\"isupper\",\"isxdigit\",\"labs\",\"launder\",\"ldexp\",\"log\",\"log10\",\"make_pair\",\"make_shared\",\"make_shared_for_overwrite\",\"make_tuple\",\"make_unique\",\"malloc\",\"memchr\",\"memcmp\",\"memcpy\",\"memset\",\"modf\",\"move\",\"pow\",\"printf\",\"putchar\",\"puts\",\"realloc\",\"scanf\",\"sin\",\"sinh\",\"snprintf\",\"sprintf\",\"sqrt\",\"sscanf\",\"std\",\"stderr\",\"stdin\",\"stdout\",\"strcat\",\"strchr\",\"strcmp\",\"strcpy\",\"strcspn\",\"strlen\",\"strncat\",\"strncmp\",\"strncpy\",\"strpbrk\",\"strrchr\",\"strspn\",\"strstr\",\"swap\",\"tan\",\"tanh\",\"terminate\",\"to_underlying\",\"tolower\",\"toupper\",\"vfprintf\",\"visit\",\"vprintf\",\"vsprintf\"]\n},\nbegin:t.concat(/\\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\\s*\\(/))\n},_=[p,o,i,a,e.C_BLOCK_COMMENT_MODE,c,s],m={variants:[{begin:/=/,end:/;/},{\nbegin:/\\(/,end:/\\)/},{beginKeywords:\"new throw return else\",end:/;/}],\nkeywords:u,contains:_.concat([{begin:/\\(/,end:/\\)/,keywords:u,\ncontains:_.concat([\"self\"]),relevance:0}]),relevance:0},g={className:\"function\",\nbegin:\"(\"+r+\"[\\\\*&\\\\s]+)+\"+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,\nkeywords:u,illegal:/[^\\w\\s\\*&:<>.]/,contains:[{begin:\"decltype\\\\(auto\\\\)\",\nkeywords:u,relevance:0},{begin:d,returnBegin:!0,contains:[l],relevance:0},{\nbegin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[s,c]},{\nrelevance:0,match:/,/},{className:\"params\",begin:/\\(/,end:/\\)/,keywords:u,\nrelevance:0,contains:[a,e.C_BLOCK_COMMENT_MODE,s,c,i,{begin:/\\(/,end:/\\)/,\nkeywords:u,relevance:0,contains:[\"self\",a,e.C_BLOCK_COMMENT_MODE,s,c,i]}]\n},i,a,e.C_BLOCK_COMMENT_MODE,o]};return{name:\"C++\",\naliases:[\"cc\",\"c++\",\"h++\",\"hpp\",\"hh\",\"hxx\",\"cxx\"],keywords:u,illegal:\"\",keywords:u,contains:[\"self\",i]},{begin:e.IDENT_RE+\"::\",keywords:u},{\nmatch:[/\\b(?:enum(?:\\s+(?:class|struct))?|class|struct|union)/,/\\s+/,/\\w+/],\nclassName:{1:\"keyword\",3:\"title.class\"}}])}}})();hljs.registerLanguage(\"cpp\",e)\n})();/*! `c` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{const n=e.regex,t=e.COMMENT(\"//\",\"$\",{\ncontains:[{begin:/\\\\\\n/}]\n}),s=\"[a-zA-Z_]\\\\w*::\",a=\"(decltype\\\\(auto\\\\)|\"+n.optional(s)+\"[a-zA-Z_]\\\\w*\"+n.optional(\"<[^<>]+>\")+\")\",r={\nclassName:\"type\",variants:[{begin:\"\\\\b[a-z\\\\d_]*_t\\\\b\"},{\nmatch:/\\batomic_[a-z]{3,6}\\b/}]},i={className:\"string\",variants:[{\nbegin:'(u8?|U|L)?\"',end:'\"',illegal:\"\\\\n\",contains:[e.BACKSLASH_ESCAPE]},{\nbegin:\"(u8?|U|L)?'(\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)|.)\",\nend:\"'\",illegal:\".\"},e.END_SAME_AS_BEGIN({\nbegin:/(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,end:/\\)([^()\\\\ ]{0,16})\"/})]},l={\nclassName:\"number\",variants:[{begin:\"\\\\b(0b[01']+)\"},{\nbegin:\"(-?)\\\\b([\\\\d']+(\\\\.[\\\\d']*)?|\\\\.[\\\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)\"\n},{\nbegin:\"(-?)(\\\\b0[xX][a-fA-F0-9']+|(\\\\b[\\\\d']+(\\\\.[\\\\d']*)?|\\\\.[\\\\d']+)([eE][-+]?[\\\\d']+)?)\"\n}],relevance:0},o={className:\"meta\",begin:/#\\s*[a-z]+\\b/,end:/$/,keywords:{\nkeyword:\"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include\"\n},contains:[{begin:/\\\\\\n/,relevance:0},e.inherit(i,{className:\"string\"}),{\nclassName:\"string\",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},c={\nclassName:\"title\",begin:n.optional(s)+e.IDENT_RE,relevance:0\n},d=n.optional(s)+e.IDENT_RE+\"\\\\s*\\\\(\",u={\nkeyword:[\"asm\",\"auto\",\"break\",\"case\",\"continue\",\"default\",\"do\",\"else\",\"enum\",\"extern\",\"for\",\"fortran\",\"goto\",\"if\",\"inline\",\"register\",\"restrict\",\"return\",\"sizeof\",\"struct\",\"switch\",\"typedef\",\"union\",\"volatile\",\"while\",\"_Alignas\",\"_Alignof\",\"_Atomic\",\"_Generic\",\"_Noreturn\",\"_Static_assert\",\"_Thread_local\",\"alignas\",\"alignof\",\"noreturn\",\"static_assert\",\"thread_local\",\"_Pragma\"],\ntype:[\"float\",\"double\",\"signed\",\"unsigned\",\"int\",\"short\",\"long\",\"char\",\"void\",\"_Bool\",\"_Complex\",\"_Imaginary\",\"_Decimal32\",\"_Decimal64\",\"_Decimal128\",\"const\",\"static\",\"complex\",\"bool\",\"imaginary\"],\nliteral:\"true false NULL\",\nbuilt_in:\"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr\"\n},g=[o,r,t,e.C_BLOCK_COMMENT_MODE,l,i],m={variants:[{begin:/=/,end:/;/},{\nbegin:/\\(/,end:/\\)/},{beginKeywords:\"new throw return else\",end:/;/}],\nkeywords:u,contains:g.concat([{begin:/\\(/,end:/\\)/,keywords:u,\ncontains:g.concat([\"self\"]),relevance:0}]),relevance:0},p={\nbegin:\"(\"+a+\"[\\\\*&\\\\s]+)+\"+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,\nkeywords:u,illegal:/[^\\w\\s\\*&:<>.]/,contains:[{begin:\"decltype\\\\(auto\\\\)\",\nkeywords:u,relevance:0},{begin:d,returnBegin:!0,contains:[e.inherit(c,{\nclassName:\"title.function\"})],relevance:0},{relevance:0,match:/,/},{\nclassName:\"params\",begin:/\\(/,end:/\\)/,keywords:u,relevance:0,\ncontains:[t,e.C_BLOCK_COMMENT_MODE,i,l,r,{begin:/\\(/,end:/\\)/,keywords:u,\nrelevance:0,contains:[\"self\",t,e.C_BLOCK_COMMENT_MODE,i,l,r]}]\n},r,t,e.C_BLOCK_COMMENT_MODE,o]};return{name:\"C\",aliases:[\"h\"],keywords:u,\ndisableAutodetect:!0,illegal:\"=]/,contains:[{\nbeginKeywords:\"final class struct\"},e.TITLE_MODE]}]),exports:{preprocessor:o,\nstrings:i,keywords:u}}}})();hljs.registerLanguage(\"c\",e)})();/*! `plaintext` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var t=(()=>{\"use strict\";return t=>({name:\"Plain text\",\naliases:[\"text\",\"txt\"],disableAutodetect:!0})})()\n;hljs.registerLanguage(\"plaintext\",t)})();/*! `sql` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{\nconst r=e.regex,t=e.COMMENT(\"--\",\"$\"),n=[\"true\",\"false\",\"unknown\"],a=[\"bigint\",\"binary\",\"blob\",\"boolean\",\"char\",\"character\",\"clob\",\"date\",\"dec\",\"decfloat\",\"decimal\",\"float\",\"int\",\"integer\",\"interval\",\"nchar\",\"nclob\",\"national\",\"numeric\",\"real\",\"row\",\"smallint\",\"time\",\"timestamp\",\"varchar\",\"varying\",\"varbinary\"],i=[\"abs\",\"acos\",\"array_agg\",\"asin\",\"atan\",\"avg\",\"cast\",\"ceil\",\"ceiling\",\"coalesce\",\"corr\",\"cos\",\"cosh\",\"count\",\"covar_pop\",\"covar_samp\",\"cume_dist\",\"dense_rank\",\"deref\",\"element\",\"exp\",\"extract\",\"first_value\",\"floor\",\"json_array\",\"json_arrayagg\",\"json_exists\",\"json_object\",\"json_objectagg\",\"json_query\",\"json_table\",\"json_table_primitive\",\"json_value\",\"lag\",\"last_value\",\"lead\",\"listagg\",\"ln\",\"log\",\"log10\",\"lower\",\"max\",\"min\",\"mod\",\"nth_value\",\"ntile\",\"nullif\",\"percent_rank\",\"percentile_cont\",\"percentile_disc\",\"position\",\"position_regex\",\"power\",\"rank\",\"regr_avgx\",\"regr_avgy\",\"regr_count\",\"regr_intercept\",\"regr_r2\",\"regr_slope\",\"regr_sxx\",\"regr_sxy\",\"regr_syy\",\"row_number\",\"sin\",\"sinh\",\"sqrt\",\"stddev_pop\",\"stddev_samp\",\"substring\",\"substring_regex\",\"sum\",\"tan\",\"tanh\",\"translate\",\"translate_regex\",\"treat\",\"trim\",\"trim_array\",\"unnest\",\"upper\",\"value_of\",\"var_pop\",\"var_samp\",\"width_bucket\"],s=[\"create table\",\"insert into\",\"primary key\",\"foreign key\",\"not null\",\"alter table\",\"add constraint\",\"grouping sets\",\"on overflow\",\"character set\",\"respect nulls\",\"ignore nulls\",\"nulls first\",\"nulls last\",\"depth first\",\"breadth first\"],o=i,c=[\"abs\",\"acos\",\"all\",\"allocate\",\"alter\",\"and\",\"any\",\"are\",\"array\",\"array_agg\",\"array_max_cardinality\",\"as\",\"asensitive\",\"asin\",\"asymmetric\",\"at\",\"atan\",\"atomic\",\"authorization\",\"avg\",\"begin\",\"begin_frame\",\"begin_partition\",\"between\",\"bigint\",\"binary\",\"blob\",\"boolean\",\"both\",\"by\",\"call\",\"called\",\"cardinality\",\"cascaded\",\"case\",\"cast\",\"ceil\",\"ceiling\",\"char\",\"char_length\",\"character\",\"character_length\",\"check\",\"classifier\",\"clob\",\"close\",\"coalesce\",\"collate\",\"collect\",\"column\",\"commit\",\"condition\",\"connect\",\"constraint\",\"contains\",\"convert\",\"copy\",\"corr\",\"corresponding\",\"cos\",\"cosh\",\"count\",\"covar_pop\",\"covar_samp\",\"create\",\"cross\",\"cube\",\"cume_dist\",\"current\",\"current_catalog\",\"current_date\",\"current_default_transform_group\",\"current_path\",\"current_role\",\"current_row\",\"current_schema\",\"current_time\",\"current_timestamp\",\"current_path\",\"current_role\",\"current_transform_group_for_type\",\"current_user\",\"cursor\",\"cycle\",\"date\",\"day\",\"deallocate\",\"dec\",\"decimal\",\"decfloat\",\"declare\",\"default\",\"define\",\"delete\",\"dense_rank\",\"deref\",\"describe\",\"deterministic\",\"disconnect\",\"distinct\",\"double\",\"drop\",\"dynamic\",\"each\",\"element\",\"else\",\"empty\",\"end\",\"end_frame\",\"end_partition\",\"end-exec\",\"equals\",\"escape\",\"every\",\"except\",\"exec\",\"execute\",\"exists\",\"exp\",\"external\",\"extract\",\"false\",\"fetch\",\"filter\",\"first_value\",\"float\",\"floor\",\"for\",\"foreign\",\"frame_row\",\"free\",\"from\",\"full\",\"function\",\"fusion\",\"get\",\"global\",\"grant\",\"group\",\"grouping\",\"groups\",\"having\",\"hold\",\"hour\",\"identity\",\"in\",\"indicator\",\"initial\",\"inner\",\"inout\",\"insensitive\",\"insert\",\"int\",\"integer\",\"intersect\",\"intersection\",\"interval\",\"into\",\"is\",\"join\",\"json_array\",\"json_arrayagg\",\"json_exists\",\"json_object\",\"json_objectagg\",\"json_query\",\"json_table\",\"json_table_primitive\",\"json_value\",\"lag\",\"language\",\"large\",\"last_value\",\"lateral\",\"lead\",\"leading\",\"left\",\"like\",\"like_regex\",\"listagg\",\"ln\",\"local\",\"localtime\",\"localtimestamp\",\"log\",\"log10\",\"lower\",\"match\",\"match_number\",\"match_recognize\",\"matches\",\"max\",\"member\",\"merge\",\"method\",\"min\",\"minute\",\"mod\",\"modifies\",\"module\",\"month\",\"multiset\",\"national\",\"natural\",\"nchar\",\"nclob\",\"new\",\"no\",\"none\",\"normalize\",\"not\",\"nth_value\",\"ntile\",\"null\",\"nullif\",\"numeric\",\"octet_length\",\"occurrences_regex\",\"of\",\"offset\",\"old\",\"omit\",\"on\",\"one\",\"only\",\"open\",\"or\",\"order\",\"out\",\"outer\",\"over\",\"overlaps\",\"overlay\",\"parameter\",\"partition\",\"pattern\",\"per\",\"percent\",\"percent_rank\",\"percentile_cont\",\"percentile_disc\",\"period\",\"portion\",\"position\",\"position_regex\",\"power\",\"precedes\",\"precision\",\"prepare\",\"primary\",\"procedure\",\"ptf\",\"range\",\"rank\",\"reads\",\"real\",\"recursive\",\"ref\",\"references\",\"referencing\",\"regr_avgx\",\"regr_avgy\",\"regr_count\",\"regr_intercept\",\"regr_r2\",\"regr_slope\",\"regr_sxx\",\"regr_sxy\",\"regr_syy\",\"release\",\"result\",\"return\",\"returns\",\"revoke\",\"right\",\"rollback\",\"rollup\",\"row\",\"row_number\",\"rows\",\"running\",\"savepoint\",\"scope\",\"scroll\",\"search\",\"second\",\"seek\",\"select\",\"sensitive\",\"session_user\",\"set\",\"show\",\"similar\",\"sin\",\"sinh\",\"skip\",\"smallint\",\"some\",\"specific\",\"specifictype\",\"sql\",\"sqlexception\",\"sqlstate\",\"sqlwarning\",\"sqrt\",\"start\",\"static\",\"stddev_pop\",\"stddev_samp\",\"submultiset\",\"subset\",\"substring\",\"substring_regex\",\"succeeds\",\"sum\",\"symmetric\",\"system\",\"system_time\",\"system_user\",\"table\",\"tablesample\",\"tan\",\"tanh\",\"then\",\"time\",\"timestamp\",\"timezone_hour\",\"timezone_minute\",\"to\",\"trailing\",\"translate\",\"translate_regex\",\"translation\",\"treat\",\"trigger\",\"trim\",\"trim_array\",\"true\",\"truncate\",\"uescape\",\"union\",\"unique\",\"unknown\",\"unnest\",\"update\",\"upper\",\"user\",\"using\",\"value\",\"values\",\"value_of\",\"var_pop\",\"var_samp\",\"varbinary\",\"varchar\",\"varying\",\"versioning\",\"when\",\"whenever\",\"where\",\"width_bucket\",\"window\",\"with\",\"within\",\"without\",\"year\",\"add\",\"asc\",\"collation\",\"desc\",\"final\",\"first\",\"last\",\"view\"].filter((e=>!i.includes(e))),l={\nbegin:r.concat(/\\b/,r.either(...o),/\\s*\\(/),relevance:0,keywords:{built_in:o}}\n;return{name:\"SQL\",case_insensitive:!0,illegal:/[{}]|<\\//,keywords:{\n$pattern:/\\b[\\w\\.]+/,keyword:((e,{exceptions:r,when:t}={})=>{const n=t\n;return r=r||[],e.map((e=>e.match(/\\|\\d+$/)||r.includes(e)?e:n(e)?e+\"|0\":e))\n})(c,{when:e=>e.length<3}),literal:n,type:a,\nbuilt_in:[\"current_catalog\",\"current_date\",\"current_default_transform_group\",\"current_path\",\"current_role\",\"current_schema\",\"current_transform_group_for_type\",\"current_user\",\"session_user\",\"system_time\",\"system_user\",\"current_time\",\"localtime\",\"current_timestamp\",\"localtimestamp\"]\n},contains:[{begin:r.either(...s),relevance:0,keywords:{$pattern:/[\\w\\.]+/,\nkeyword:c.concat(s),literal:n,type:a}},{className:\"type\",\nbegin:r.either(\"double precision\",\"large object\",\"with timezone\",\"without timezone\")\n},l,{className:\"variable\",begin:/@[a-z0-9]+/},{className:\"string\",variants:[{\nbegin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/\"/,end:/\"/,contains:[{\nbegin:/\"\"/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{className:\"operator\",\nbegin:/[-+*/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}})()\n;hljs.registerLanguage(\"sql\",e)})();/*! `markdown` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{const n={begin:/<\\/?[A-Za-z_]/,\nend:\">\",subLanguage:\"xml\",relevance:0},a={variants:[{begin:/\\[.+?\\]\\[.*?\\]/,\nrelevance:0},{\nbegin:/\\[.+?\\]\\(((data|javascript|mailto):|(?:http|ftp)s?:\\/\\/).*?\\)/,\nrelevance:2},{\nbegin:e.regex.concat(/\\[.+?\\]\\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\\/\\/.*?\\)/),\nrelevance:2},{begin:/\\[.+?\\]\\([./?&#].*?\\)/,relevance:1},{\nbegin:/\\[.*?\\]\\(.*?\\)/,relevance:0}],returnBegin:!0,contains:[{match:/\\[(?=\\])/\n},{className:\"string\",relevance:0,begin:\"\\\\[\",end:\"\\\\]\",excludeBegin:!0,\nreturnEnd:!0},{className:\"link\",relevance:0,begin:\"\\\\]\\\\(\",end:\"\\\\)\",\nexcludeBegin:!0,excludeEnd:!0},{className:\"symbol\",relevance:0,begin:\"\\\\]\\\\[\",\nend:\"\\\\]\",excludeBegin:!0,excludeEnd:!0}]},i={className:\"strong\",contains:[],\nvariants:[{begin:/_{2}(?!\\s)/,end:/_{2}/},{begin:/\\*{2}(?!\\s)/,end:/\\*{2}/}]\n},s={className:\"emphasis\",contains:[],variants:[{begin:/\\*(?![*\\s])/,end:/\\*/},{\nbegin:/_(?![_\\s])/,end:/_/,relevance:0}]},c=e.inherit(i,{contains:[]\n}),t=e.inherit(s,{contains:[]});i.contains.push(t),s.contains.push(c)\n;let g=[n,a];return[i,s,c,t].forEach((e=>{e.contains=e.contains.concat(g)\n})),g=g.concat(i,s),{name:\"Markdown\",aliases:[\"md\",\"mkdown\",\"mkd\"],contains:[{\nclassName:\"section\",variants:[{begin:\"^#{1,6}\",end:\"$\",contains:g},{\nbegin:\"(?=^.+?\\\\n[=-]{2,}$)\",contains:[{begin:\"^[=-]*$\"},{begin:\"^\",end:\"\\\\n\",\ncontains:g}]}]},n,{className:\"bullet\",begin:\"^[ \\t]*([*+-]|(\\\\d+\\\\.))(?=\\\\s+)\",\nend:\"\\\\s+\",excludeEnd:!0},i,s,{className:\"quote\",begin:\"^>\\\\s+\",contains:g,\nend:\"$\"},{className:\"code\",variants:[{begin:\"(`{3,})[^`](.|\\\\n)*?\\\\1`*[ ]*\"},{\nbegin:\"(~{3,})[^~](.|\\\\n)*?\\\\1~*[ ]*\"},{begin:\"```\",end:\"```+[ ]*$\"},{\nbegin:\"~~~\",end:\"~~~+[ ]*$\"},{begin:\"`.+?`\"},{begin:\"(?=^( {4}|\\\\t))\",\ncontains:[{begin:\"^( {4}|\\\\t)\",end:\"(\\\\n)$\"}],relevance:0}]},{\nbegin:\"^[-\\\\*]{3,}\",end:\"$\"},a,{begin:/^\\[[^\\n]+\\]:/,returnBegin:!0,contains:[{\nclassName:\"symbol\",begin:/\\[/,end:/\\]/,excludeBegin:!0,excludeEnd:!0},{\nclassName:\"link\",begin:/:\\s*/,end:/$/,excludeBegin:!0}]}]}}})()\n;hljs.registerLanguage(\"markdown\",e)})();/*! `wasm` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{e.regex;const a=e.COMMENT(/\\(;/,/;\\)/)\n;return a.contains.push(\"self\"),{name:\"WebAssembly\",keywords:{$pattern:/[\\w.]+/,\nkeyword:[\"anyfunc\",\"block\",\"br\",\"br_if\",\"br_table\",\"call\",\"call_indirect\",\"data\",\"drop\",\"elem\",\"else\",\"end\",\"export\",\"func\",\"global.get\",\"global.set\",\"local.get\",\"local.set\",\"local.tee\",\"get_global\",\"get_local\",\"global\",\"if\",\"import\",\"local\",\"loop\",\"memory\",\"memory.grow\",\"memory.size\",\"module\",\"mut\",\"nop\",\"offset\",\"param\",\"result\",\"return\",\"select\",\"set_global\",\"set_local\",\"start\",\"table\",\"tee_local\",\"then\",\"type\",\"unreachable\"]\n},contains:[e.COMMENT(/;;/,/$/),a,{match:[/(?:offset|align)/,/\\s*/,/=/],\nclassName:{1:\"keyword\",3:\"operator\"}},{className:\"variable\",begin:/\\$[\\w_]+/},{\nmatch:/(\\((?!;)|\\))+/,className:\"punctuation\",relevance:0},{\nbegin:[/(?:func|call|call_indirect)/,/\\s+/,/\\$[^\\s)]+/],className:{1:\"keyword\",\n3:\"title.function\"}},e.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\\.)/,\nclassName:\"type\"},{className:\"keyword\",\nmatch:/\\b(f32|f64|i32|i64)(?:\\.(?:abs|add|and|ceil|clz|const|convert_[su]\\/i(?:32|64)|copysign|ctz|demote\\/f64|div(?:_[su])?|eqz?|extend_[su]\\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\\/f32|reinterpret\\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\\/f(?:32|64))?|wrap\\/i64|xor))\\b/\n},{className:\"number\",relevance:0,\nmatch:/[+-]?\\b(?:\\d(?:_?\\d)*(?:\\.\\d(?:_?\\d)*)?(?:[eE][+-]?\\d(?:_?\\d)*)?|0x[\\da-fA-F](?:_?[\\da-fA-F])*(?:\\.[\\da-fA-F](?:_?[\\da-fA-D])*)?(?:[pP][+-]?\\d(?:_?\\d)*)?)\\b|\\binf\\b|\\bnan(?::0x[\\da-fA-F](?:_?[\\da-fA-D])*)?\\b/\n}]}}})();hljs.registerLanguage(\"wasm\",e)})();/*! `objectivec` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{const n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={\n$pattern:n,keyword:[\"@interface\",\"@class\",\"@protocol\",\"@implementation\"]}\n;return{name:\"Objective-C\",\naliases:[\"mm\",\"objc\",\"obj-c\",\"obj-c++\",\"objective-c++\"],keywords:{\n\"variable.language\":[\"this\",\"super\"],$pattern:n,\nkeyword:[\"while\",\"export\",\"sizeof\",\"typedef\",\"const\",\"struct\",\"for\",\"union\",\"volatile\",\"static\",\"mutable\",\"if\",\"do\",\"return\",\"goto\",\"enum\",\"else\",\"break\",\"extern\",\"asm\",\"case\",\"default\",\"register\",\"explicit\",\"typename\",\"switch\",\"continue\",\"inline\",\"readonly\",\"assign\",\"readwrite\",\"self\",\"@synchronized\",\"id\",\"typeof\",\"nonatomic\",\"IBOutlet\",\"IBAction\",\"strong\",\"weak\",\"copy\",\"in\",\"out\",\"inout\",\"bycopy\",\"byref\",\"oneway\",\"__strong\",\"__weak\",\"__block\",\"__autoreleasing\",\"@private\",\"@protected\",\"@public\",\"@try\",\"@property\",\"@end\",\"@throw\",\"@catch\",\"@finally\",\"@autoreleasepool\",\"@synthesize\",\"@dynamic\",\"@selector\",\"@optional\",\"@required\",\"@encode\",\"@package\",\"@import\",\"@defs\",\"@compatibility_alias\",\"__bridge\",\"__bridge_transfer\",\"__bridge_retained\",\"__bridge_retain\",\"__covariant\",\"__contravariant\",\"__kindof\",\"_Nonnull\",\"_Nullable\",\"_Null_unspecified\",\"__FUNCTION__\",\"__PRETTY_FUNCTION__\",\"__attribute__\",\"getter\",\"setter\",\"retain\",\"unsafe_unretained\",\"nonnull\",\"nullable\",\"null_unspecified\",\"null_resettable\",\"class\",\"instancetype\",\"NS_DESIGNATED_INITIALIZER\",\"NS_UNAVAILABLE\",\"NS_REQUIRES_SUPER\",\"NS_RETURNS_INNER_POINTER\",\"NS_INLINE\",\"NS_AVAILABLE\",\"NS_DEPRECATED\",\"NS_ENUM\",\"NS_OPTIONS\",\"NS_SWIFT_UNAVAILABLE\",\"NS_ASSUME_NONNULL_BEGIN\",\"NS_ASSUME_NONNULL_END\",\"NS_REFINED_FOR_SWIFT\",\"NS_SWIFT_NAME\",\"NS_SWIFT_NOTHROW\",\"NS_DURING\",\"NS_HANDLER\",\"NS_ENDHANDLER\",\"NS_VALUERETURN\",\"NS_VOIDRETURN\"],\nliteral:[\"false\",\"true\",\"FALSE\",\"TRUE\",\"nil\",\"YES\",\"NO\",\"NULL\"],\nbuilt_in:[\"dispatch_once_t\",\"dispatch_queue_t\",\"dispatch_sync\",\"dispatch_async\",\"dispatch_once\"],\ntype:[\"int\",\"float\",\"char\",\"unsigned\",\"signed\",\"short\",\"long\",\"double\",\"wchar_t\",\"unichar\",\"void\",\"bool\",\"BOOL\",\"id|0\",\"_Bool\"]\n},illegal:\"/,end:/$/,illegal:\"\\\\n\"\n},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:\"class\",\nbegin:\"(\"+_.keyword.join(\"|\")+\")\\\\b\",end:/(\\{|$)/,excludeEnd:!0,keywords:_,\ncontains:[e.UNDERSCORE_TITLE_MODE]},{begin:\"\\\\.\"+e.UNDERSCORE_IDENT_RE,\nrelevance:0}]}}})();hljs.registerLanguage(\"objectivec\",e)})();/*! `ini` grammar compiled for Highlight.js 11.7.0 */\n(()=>{var e=(()=>{\"use strict\";return e=>{const n=e.regex,a={className:\"number\",\nrelevance:0,variants:[{begin:/([+-]+)?[\\d]+_[\\d_]+/},{begin:e.NUMBER_RE}]\n},s=e.COMMENT();s.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];const i={\nclassName:\"variable\",variants:[{begin:/\\$[\\w\\d\"][\\w\\d_]*/},{begin:/\\$\\{(.*?)\\}/\n}]},t={className:\"literal\",begin:/\\bon|off|true|false|yes|no\\b/},r={\nclassName:\"string\",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:\"'''\",\nend:\"'''\",relevance:10},{begin:'\"\"\"',end:'\"\"\"',relevance:10},{begin:'\"',end:'\"'\n},{begin:\"'\",end:\"'\"}]},l={begin:/\\[/,end:/\\]/,contains:[s,t,i,r,a,\"self\"],\nrelevance:0},c=n.either(/[A-Za-z0-9_-]+/,/\"(\\\\\"|[^\"])*\"/,/'[^']*'/);return{\nname:\"TOML, also INI\",aliases:[\"toml\"],case_insensitive:!0,illegal:/\\S/,\ncontains:[s,{className:\"section\",begin:/\\[+/,end:/\\]+/},{\nbegin:n.concat(c,\"(\\\\s*\\\\.\\\\s*\",c,\")*\",n.lookahead(/\\s*=\\s*[^#\\s]/)),\nclassName:\"attr\",starts:{end:/$/,contains:[s,l,t,i,r,a]}}]}}})()\n;hljs.registerLanguage(\"ini\",e)})();", "/*\nTurbo 7.3.0\nCopyright \u00A9 2023 37signals LLC\n */\n(function () {\n if (window.Reflect === undefined ||\n window.customElements === undefined ||\n window.customElements.polyfillWrapFlushCallback) {\n return;\n }\n const BuiltInHTMLElement = HTMLElement;\n const wrapperForTheName = {\n HTMLElement: function HTMLElement() {\n return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n },\n };\n window.HTMLElement = wrapperForTheName[\"HTMLElement\"];\n HTMLElement.prototype = BuiltInHTMLElement.prototype;\n HTMLElement.prototype.constructor = HTMLElement;\n Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n\n/**\n * The MIT License (MIT)\n * \n * Copyright (c) 2019 Javan Makhmali\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function(prototype) {\n if (typeof prototype.requestSubmit == \"function\") return\n\n prototype.requestSubmit = function(submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n } else {\n submitter = document.createElement(\"input\");\n submitter.type = \"submit\";\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n submitter.form == form || raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n }\n\n function raise(errorConstructor, message, name) {\n throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\nfunction findSubmitterFromClickTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n const candidate = element ? element.closest(\"input, button\") : null;\n return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\nfunction clickCaptured(event) {\n const submitter = findSubmitterFromClickTarget(event.target);\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n(function () {\n if (\"submitter\" in Event.prototype)\n return;\n let prototype = window.Event.prototype;\n if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n prototype = window.SubmitEvent.prototype;\n }\n else if (\"SubmitEvent\" in window) {\n return;\n }\n addEventListener(\"click\", clickCaptured, true);\n Object.defineProperty(prototype, \"submitter\", {\n get() {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target);\n }\n },\n });\n})();\n\nvar FrameLoadingStyle;\n(function (FrameLoadingStyle) {\n FrameLoadingStyle[\"eager\"] = \"eager\";\n FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\nclass FrameElement extends HTMLElement {\n static get observedAttributes() {\n return [\"disabled\", \"complete\", \"loading\", \"src\"];\n }\n constructor() {\n super();\n this.loaded = Promise.resolve();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n connectedCallback() {\n this.delegate.connect();\n }\n disconnectedCallback() {\n this.delegate.disconnect();\n }\n reload() {\n return this.delegate.sourceURLReloaded();\n }\n attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n }\n else if (name == \"complete\") {\n this.delegate.completeChanged();\n }\n else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n }\n else {\n this.delegate.disabledChanged();\n }\n }\n get src() {\n return this.getAttribute(\"src\");\n }\n set src(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n }\n else {\n this.removeAttribute(\"src\");\n }\n }\n get loading() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n }\n set loading(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n }\n else {\n this.removeAttribute(\"loading\");\n }\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n }\n else {\n this.removeAttribute(\"disabled\");\n }\n }\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\");\n }\n set autoscroll(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n }\n else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n get complete() {\n return !this.delegate.isLoading;\n }\n get isActive() {\n return this.ownerDocument === document && !this.isPreview;\n }\n get isPreview() {\n var _a, _b;\n return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n }\n}\nfunction frameLoadingStyleFromString(style) {\n switch (style.toLowerCase()) {\n case \"lazy\":\n return FrameLoadingStyle.lazy;\n default:\n return FrameLoadingStyle.eager;\n }\n}\n\nfunction expandURL(locatable) {\n return new URL(locatable.toString(), document.baseURI);\n}\nfunction getAnchor(url) {\n let anchorMatch;\n if (url.hash) {\n return url.hash.slice(1);\n }\n else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n return anchorMatch[1];\n }\n}\nfunction getAction(form, submitter) {\n const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n return expandURL(action);\n}\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\nfunction isHTML(url) {\n return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/);\n}\nfunction isPrefixedBy(baseURL, url) {\n const prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\nfunction locationIsVisitable(location, rootLocation) {\n return isPrefixedBy(location, rootLocation) && isHTML(location);\n}\nfunction getRequestURL(url) {\n const anchor = getAnchor(url);\n return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;\n}\nfunction toCacheKey(url) {\n return getRequestURL(url);\n}\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href;\n}\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1);\n}\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0];\n}\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname);\n}\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\";\n}\n\nclass FetchResponse {\n constructor(response) {\n this.response = response;\n }\n get succeeded() {\n return this.response.ok;\n }\n get failed() {\n return !this.succeeded;\n }\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499;\n }\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599;\n }\n get redirected() {\n return this.response.redirected;\n }\n get location() {\n return expandURL(this.response.url);\n }\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n }\n get statusCode() {\n return this.response.status;\n }\n get contentType() {\n return this.header(\"Content-Type\");\n }\n get responseText() {\n return this.response.clone().text();\n }\n get responseHTML() {\n if (this.isHTML) {\n return this.response.clone().text();\n }\n else {\n return Promise.resolve(undefined);\n }\n }\n header(name) {\n return this.response.headers.get(name);\n }\n}\n\nfunction activateScriptElement(element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element;\n }\n else {\n const createdScriptElement = document.createElement(\"script\");\n const cspNonce = getMetaContent(\"csp-nonce\");\n if (cspNonce) {\n createdScriptElement.nonce = cspNonce;\n }\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement;\n }\n}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (const { name, value } of sourceElement.attributes) {\n destinationElement.setAttribute(name, value);\n }\n}\nfunction createDocumentFragment(html) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n return template.content;\n}\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n const event = new CustomEvent(eventName, {\n cancelable,\n bubbles: true,\n composed: true,\n detail,\n });\n if (target && target.isConnected) {\n target.dispatchEvent(event);\n }\n else {\n document.documentElement.dispatchEvent(event);\n }\n return event;\n}\nfunction nextAnimationFrame() {\n return new Promise((resolve) => requestAnimationFrame(() => resolve()));\n}\nfunction nextEventLoopTick() {\n return new Promise((resolve) => setTimeout(() => resolve(), 0));\n}\nfunction nextMicrotask() {\n return Promise.resolve();\n}\nfunction parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\");\n}\nfunction unindent(strings, ...values) {\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n const match = lines[0].match(/^\\s+/);\n const indent = match ? match[0].length : 0;\n return lines.map((line) => line.slice(indent)).join(\"\\n\");\n}\nfunction interpolate(strings, values) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i];\n return result + string + value;\n }, \"\");\n}\nfunction uuid() {\n return Array.from({ length: 36 })\n .map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\";\n }\n else if (i == 14) {\n return \"4\";\n }\n else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16);\n }\n else {\n return Math.floor(Math.random() * 15).toString(16);\n }\n })\n .join(\"\");\n}\nfunction getAttribute(attributeName, ...elements) {\n for (const value of elements.map((element) => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {\n if (typeof value == \"string\")\n return value;\n }\n return null;\n}\nfunction hasAttribute(attributeName, ...elements) {\n return elements.some((element) => element && element.hasAttribute(attributeName));\n}\nfunction markAsBusy(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.setAttribute(\"busy\", \"\");\n }\n element.setAttribute(\"aria-busy\", \"true\");\n }\n}\nfunction clearBusyState(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.removeAttribute(\"busy\");\n }\n element.removeAttribute(\"aria-busy\");\n }\n}\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n return new Promise((resolve) => {\n const onComplete = () => {\n element.removeEventListener(\"error\", onComplete);\n element.removeEventListener(\"load\", onComplete);\n resolve();\n };\n element.addEventListener(\"load\", onComplete, { once: true });\n element.addEventListener(\"error\", onComplete, { once: true });\n setTimeout(resolve, timeoutInMilliseconds);\n });\n}\nfunction getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState;\n case \"advance\":\n case \"restore\":\n return history.pushState;\n }\n}\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\nfunction getVisitAction(...elements) {\n const action = getAttribute(\"data-turbo-action\", ...elements);\n return isAction(action) ? action : null;\n}\nfunction getMetaElement(name) {\n return document.querySelector(`meta[name=\"${name}\"]`);\n}\nfunction getMetaContent(name) {\n const element = getMetaElement(name);\n return element && element.content;\n}\nfunction setMetaContent(name, content) {\n let element = getMetaElement(name);\n if (!element) {\n element = document.createElement(\"meta\");\n element.setAttribute(\"name\", name);\n document.head.appendChild(element);\n }\n element.setAttribute(\"content\", content);\n return element;\n}\nfunction findClosestRecursively(element, selector) {\n var _a;\n if (element instanceof Element) {\n return (element.closest(selector) ||\n findClosestRecursively(element.assignedSlot || ((_a = element.getRootNode()) === null || _a === void 0 ? void 0 : _a.host), selector));\n }\n}\n\nvar FetchMethod;\n(function (FetchMethod) {\n FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\nfunction fetchMethodFromString(method) {\n switch (method.toLowerCase()) {\n case \"get\":\n return FetchMethod.get;\n case \"post\":\n return FetchMethod.post;\n case \"put\":\n return FetchMethod.put;\n case \"patch\":\n return FetchMethod.patch;\n case \"delete\":\n return FetchMethod.delete;\n }\n}\nclass FetchRequest {\n constructor(delegate, method, location, body = new URLSearchParams(), target = null) {\n this.abortController = new AbortController();\n this.resolveRequestPromise = (_value) => { };\n this.delegate = delegate;\n this.method = method;\n this.headers = this.defaultHeaders;\n this.body = body;\n this.url = location;\n this.target = target;\n }\n get location() {\n return this.url;\n }\n get params() {\n return this.url.searchParams;\n }\n get entries() {\n return this.body ? Array.from(this.body.entries()) : [];\n }\n cancel() {\n this.abortController.abort();\n }\n async perform() {\n const { fetchOptions } = this;\n this.delegate.prepareRequest(this);\n await this.allowRequestToBeIntercepted(fetchOptions);\n try {\n this.delegate.requestStarted(this);\n const response = await fetch(this.url.href, fetchOptions);\n return await this.receive(response);\n }\n catch (error) {\n if (error.name !== \"AbortError\") {\n if (this.willDelegateErrorHandling(error)) {\n this.delegate.requestErrored(this, error);\n }\n throw error;\n }\n }\n finally {\n this.delegate.requestFinished(this);\n }\n }\n async receive(response) {\n const fetchResponse = new FetchResponse(response);\n const event = dispatch(\"turbo:before-fetch-response\", {\n cancelable: true,\n detail: { fetchResponse },\n target: this.target,\n });\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n }\n else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n }\n else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n return fetchResponse;\n }\n get fetchOptions() {\n var _a;\n return {\n method: FetchMethod[this.method].toUpperCase(),\n credentials: \"same-origin\",\n headers: this.headers,\n redirect: \"follow\",\n body: this.isSafe ? null : this.body,\n signal: this.abortSignal,\n referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href,\n };\n }\n get defaultHeaders() {\n return {\n Accept: \"text/html, application/xhtml+xml\",\n };\n }\n get isSafe() {\n return this.method === FetchMethod.get;\n }\n get abortSignal() {\n return this.abortController.signal;\n }\n acceptResponseType(mimeType) {\n this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n }\n async allowRequestToBeIntercepted(fetchOptions) {\n const requestInterception = new Promise((resolve) => (this.resolveRequestPromise = resolve));\n const event = dispatch(\"turbo:before-fetch-request\", {\n cancelable: true,\n detail: {\n fetchOptions,\n url: this.url,\n resume: this.resolveRequestPromise,\n },\n target: this.target,\n });\n if (event.defaultPrevented)\n await requestInterception;\n }\n willDelegateErrorHandling(error) {\n const event = dispatch(\"turbo:fetch-request-error\", {\n target: this.target,\n cancelable: true,\n detail: { request: this, error: error },\n });\n return !event.defaultPrevented;\n }\n}\n\nclass AppearanceObserver {\n constructor(delegate, element) {\n this.started = false;\n this.intersect = (entries) => {\n const lastEntry = entries.slice(-1)[0];\n if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element);\n }\n };\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n}\n\nclass StreamMessage {\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(createDocumentFragment(message));\n }\n else {\n return message;\n }\n }\n constructor(fragment) {\n this.fragment = importStreamElements(fragment);\n }\n}\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\nfunction importStreamElements(fragment) {\n for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n const streamElement = document.importNode(element, true);\n for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n }\n element.replaceWith(streamElement);\n }\n return fragment;\n}\n\nvar FormSubmissionState;\n(function (FormSubmissionState) {\n FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\nvar FormEnctype;\n(function (FormEnctype) {\n FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n FormEnctype[\"multipart\"] = \"multipart/form-data\";\n FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\nfunction formEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FormEnctype.multipart:\n return FormEnctype.multipart;\n case FormEnctype.plain:\n return FormEnctype.plain;\n default:\n return FormEnctype.urlEncoded;\n }\n}\nclass FormSubmission {\n static confirmMethod(message, _element, _submitter) {\n return Promise.resolve(confirm(message));\n }\n constructor(delegate, formElement, submitter, mustRedirect = false) {\n this.state = FormSubmissionState.initialized;\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.formData = buildFormData(formElement, submitter);\n this.location = expandURL(this.action);\n if (this.method == FetchMethod.get) {\n mergeFormDataEntries(this.location, [...this.body.entries()]);\n }\n this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n this.mustRedirect = mustRedirect;\n }\n get method() {\n var _a;\n const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n }\n get action() {\n var _a;\n const formElementAction = typeof this.formElement.action === \"string\" ? this.formElement.action : null;\n if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"formaction\")) {\n return this.submitter.getAttribute(\"formaction\") || \"\";\n }\n else {\n return this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n }\n }\n get body() {\n if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n return new URLSearchParams(this.stringFormData);\n }\n else {\n return this.formData;\n }\n }\n get enctype() {\n var _a;\n return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n }\n get isSafe() {\n return this.fetchRequest.isSafe;\n }\n get stringFormData() {\n return [...this.formData].reduce((entries, [name, value]) => {\n return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n }, []);\n }\n async start() {\n const { initialized, requesting } = FormSubmissionState;\n const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n if (typeof confirmationMessage === \"string\") {\n const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n if (!answer) {\n return;\n }\n }\n if (this.state == initialized) {\n this.state = requesting;\n return this.fetchRequest.perform();\n }\n }\n stop() {\n const { stopping, stopped } = FormSubmissionState;\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping;\n this.fetchRequest.cancel();\n return true;\n }\n }\n prepareRequest(request) {\n if (!request.isSafe) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n if (token) {\n request.headers[\"X-CSRF-Token\"] = token;\n }\n }\n if (this.requestAcceptsTurboStreamResponse(request)) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n requestStarted(_request) {\n var _a;\n this.state = FormSubmissionState.waiting;\n (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n this.setSubmitsWith();\n dispatch(\"turbo:submit-start\", {\n target: this.formElement,\n detail: { formSubmission: this },\n });\n this.delegate.formSubmissionStarted(this);\n }\n requestPreventedHandlingResponse(request, response) {\n this.result = { success: response.succeeded, fetchResponse: response };\n }\n requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\");\n this.delegate.formSubmissionErrored(this, error);\n }\n else {\n this.state = FormSubmissionState.receiving;\n this.result = { success: true, fetchResponse: response };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n requestFailedWithResponse(request, response) {\n this.result = { success: false, fetchResponse: response };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n requestErrored(request, error) {\n this.result = { success: false, error };\n this.delegate.formSubmissionErrored(this, error);\n }\n requestFinished(_request) {\n var _a;\n this.state = FormSubmissionState.stopped;\n (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n this.resetSubmitterText();\n dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: Object.assign({ formSubmission: this }, this.result),\n });\n this.delegate.formSubmissionFinished(this);\n }\n setSubmitsWith() {\n if (!this.submitter || !this.submitsWith)\n return;\n if (this.submitter.matches(\"button\")) {\n this.originalSubmitText = this.submitter.innerHTML;\n this.submitter.innerHTML = this.submitsWith;\n }\n else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n this.originalSubmitText = input.value;\n input.value = this.submitsWith;\n }\n }\n resetSubmitterText() {\n if (!this.submitter || !this.originalSubmitText)\n return;\n if (this.submitter.matches(\"button\")) {\n this.submitter.innerHTML = this.originalSubmitText;\n }\n else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n input.value = this.originalSubmitText;\n }\n }\n requestMustRedirect(request) {\n return !request.isSafe && this.mustRedirect;\n }\n requestAcceptsTurboStreamResponse(request) {\n return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement);\n }\n get submitsWith() {\n var _a;\n return (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"data-turbo-submits-with\");\n }\n}\nfunction buildFormData(formElement, submitter) {\n const formData = new FormData(formElement);\n const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n if (name) {\n formData.append(name, value || \"\");\n }\n return formData;\n}\nfunction getCookieValue(cookieName) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\");\n return value ? decodeURIComponent(value) : undefined;\n }\n }\n}\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected;\n}\nfunction mergeFormDataEntries(url, entries) {\n const searchParams = new URLSearchParams();\n for (const [name, value] of entries) {\n if (value instanceof File)\n continue;\n searchParams.append(name, value);\n }\n url.search = searchParams.toString();\n return url;\n}\n\nclass Snapshot {\n constructor(element) {\n this.element = element;\n }\n get activeElement() {\n return this.element.ownerDocument.activeElement;\n }\n get children() {\n return [...this.element.children];\n }\n hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null;\n }\n getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;\n }\n get isConnected() {\n return this.element.isConnected;\n }\n get firstAutofocusableElement() {\n const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n for (const element of this.element.querySelectorAll(\"[autofocus]\")) {\n if (element.closest(inertDisabledOrHidden) == null)\n return element;\n else\n continue;\n }\n return null;\n }\n get permanentElements() {\n return queryPermanentElementsAll(this.element);\n }\n getPermanentElementById(id) {\n return getPermanentElementById(this.element, id);\n }\n getPermanentElementMapForSnapshot(snapshot) {\n const permanentElementMap = {};\n for (const currentPermanentElement of this.permanentElements) {\n const { id } = currentPermanentElement;\n const newPermanentElement = snapshot.getPermanentElementById(id);\n if (newPermanentElement) {\n permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n }\n }\n return permanentElementMap;\n }\n}\nfunction getPermanentElementById(node, id) {\n return node.querySelector(`#${id}[data-turbo-permanent]`);\n}\nfunction queryPermanentElementsAll(node) {\n return node.querySelectorAll(\"[id][data-turbo-permanent]\");\n}\n\nclass FormSubmitObserver {\n constructor(delegate, eventTarget) {\n this.started = false;\n this.submitCaptured = () => {\n this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n };\n this.submitBubbled = ((event) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n const submitter = event.submitter || undefined;\n if (form &&\n submissionDoesNotDismissDialog(form, submitter) &&\n submissionDoesNotTargetIFrame(form, submitter) &&\n this.delegate.willSubmitForm(form, submitter)) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.delegate.formSubmitted(form, submitter);\n }\n }\n });\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n}\nfunction submissionDoesNotDismissDialog(form, submitter) {\n const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n return method != \"dialog\";\n}\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n if ((submitter === null || submitter === void 0 ? void 0 : submitter.hasAttribute(\"formtarget\")) || form.hasAttribute(\"target\")) {\n const target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formtarget\")) || form.target;\n for (const element of document.getElementsByName(target)) {\n if (element instanceof HTMLIFrameElement)\n return false;\n }\n return true;\n }\n else {\n return true;\n }\n}\n\nclass View {\n constructor(delegate, element) {\n this.resolveRenderPromise = (_value) => { };\n this.resolveInterceptionPromise = (_value) => { };\n this.delegate = delegate;\n this.element = element;\n }\n scrollToAnchor(anchor) {\n const element = this.snapshot.getElementForAnchor(anchor);\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n }\n else {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n }\n scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n scrollToElement(element) {\n element.scrollIntoView();\n }\n focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n }\n else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n scrollToPosition({ x, y }) {\n this.scrollRoot.scrollTo(x, y);\n }\n scrollToTop() {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n get scrollRoot() {\n return window;\n }\n async render(renderer) {\n const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;\n if (shouldRender) {\n try {\n this.renderPromise = new Promise((resolve) => (this.resolveRenderPromise = resolve));\n this.renderer = renderer;\n await this.prepareToRenderSnapshot(renderer);\n const renderInterception = new Promise((resolve) => (this.resolveInterceptionPromise = resolve));\n const options = { resume: this.resolveInterceptionPromise, render: this.renderer.renderElement };\n const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n if (!immediateRender)\n await renderInterception;\n await this.renderSnapshot(renderer);\n this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n this.delegate.preloadOnLoadLinksForView(this.element);\n this.finishRenderingSnapshot(renderer);\n }\n finally {\n delete this.renderer;\n this.resolveRenderPromise(undefined);\n delete this.renderPromise;\n }\n }\n else {\n this.invalidate(renderer.reloadReason);\n }\n }\n invalidate(reason) {\n this.delegate.viewInvalidated(reason);\n }\n async prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n await renderer.prepareToRender();\n }\n markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n }\n else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n async renderSnapshot(renderer) {\n await renderer.render();\n }\n finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n}\n\nclass FrameView extends View {\n missing() {\n this.element.innerHTML = `Content missing`;\n }\n get snapshot() {\n return new Snapshot(this.element);\n }\n}\n\nclass LinkInterceptor {\n constructor(delegate, element) {\n this.clickBubbled = (event) => {\n if (this.respondsToEventTarget(event.target)) {\n this.clickEvent = event;\n }\n else {\n delete this.clickEvent;\n }\n };\n this.linkClicked = ((event) => {\n if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n this.clickEvent.preventDefault();\n event.preventDefault();\n this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n }\n }\n delete this.clickEvent;\n });\n this.willVisit = ((_event) => {\n delete this.clickEvent;\n });\n this.delegate = delegate;\n this.element = element;\n }\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled);\n document.addEventListener(\"turbo:click\", this.linkClicked);\n document.addEventListener(\"turbo:before-visit\", this.willVisit);\n }\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled);\n document.removeEventListener(\"turbo:click\", this.linkClicked);\n document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n }\n respondsToEventTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n return element && element.closest(\"turbo-frame, html\") == this.element;\n }\n}\n\nclass LinkClickObserver {\n constructor(delegate, eventTarget) {\n this.started = false;\n this.clickCaptured = () => {\n this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n };\n this.clickBubbled = (event) => {\n if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n const target = (event.composedPath && event.composedPath()[0]) || event.target;\n const link = this.findLinkFromClickTarget(target);\n if (link && doesNotTargetIFrame(link)) {\n const location = this.getLocationForLink(link);\n if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n event.preventDefault();\n this.delegate.followedLinkToLocation(link, location);\n }\n }\n }\n };\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n clickEventIsSignificant(event) {\n return !((event.target && event.target.isContentEditable) ||\n event.defaultPrevented ||\n event.which > 1 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey);\n }\n findLinkFromClickTarget(target) {\n return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\");\n }\n getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\");\n }\n}\nfunction doesNotTargetIFrame(anchor) {\n if (anchor.hasAttribute(\"target\")) {\n for (const element of document.getElementsByName(anchor.target)) {\n if (element instanceof HTMLIFrameElement)\n return false;\n }\n return true;\n }\n else {\n return true;\n }\n}\n\nclass FormLinkClickObserver {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.linkInterceptor = new LinkClickObserver(this, element);\n }\n start() {\n this.linkInterceptor.start();\n }\n stop() {\n this.linkInterceptor.stop();\n }\n willFollowLinkToLocation(link, location, originalEvent) {\n return (this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n link.hasAttribute(\"data-turbo-method\"));\n }\n followedLinkToLocation(link, location) {\n const form = document.createElement(\"form\");\n const type = \"hidden\";\n for (const [name, value] of location.searchParams) {\n form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n }\n const action = Object.assign(location, { search: \"\" });\n form.setAttribute(\"data-turbo\", \"true\");\n form.setAttribute(\"action\", action.href);\n form.setAttribute(\"hidden\", \"\");\n const method = link.getAttribute(\"data-turbo-method\");\n if (method)\n form.setAttribute(\"method\", method);\n const turboFrame = link.getAttribute(\"data-turbo-frame\");\n if (turboFrame)\n form.setAttribute(\"data-turbo-frame\", turboFrame);\n const turboAction = getVisitAction(link);\n if (turboAction)\n form.setAttribute(\"data-turbo-action\", turboAction);\n const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n if (turboConfirm)\n form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n const turboStream = link.hasAttribute(\"data-turbo-stream\");\n if (turboStream)\n form.setAttribute(\"data-turbo-stream\", \"\");\n this.delegate.submittedFormLinkToLocation(link, location, form);\n document.body.appendChild(form);\n form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n requestAnimationFrame(() => form.requestSubmit());\n }\n}\n\nclass Bardo {\n static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n const bardo = new this(delegate, permanentElementMap);\n bardo.enter();\n await callback();\n bardo.leave();\n }\n constructor(delegate, permanentElementMap) {\n this.delegate = delegate;\n this.permanentElementMap = permanentElementMap;\n }\n enter() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n }\n }\n leave() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement] = this.permanentElementMap[id];\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n this.delegate.leavingBardo(currentPermanentElement);\n }\n }\n replaceNewPermanentElementWithPlaceholder(permanentElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n replaceCurrentPermanentElementWithClone(permanentElement) {\n const clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n replacePlaceholderWithPermanentElement(permanentElement) {\n const placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n }\n getPlaceholderById(id) {\n return this.placeholders.find((element) => element.content == id);\n }\n get placeholders() {\n return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")];\n }\n}\nfunction createPlaceholderForPermanentElement(permanentElement) {\n const element = document.createElement(\"meta\");\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n element.setAttribute(\"content\", permanentElement.id);\n return element;\n}\n\nclass Renderer {\n constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n this.activeElement = null;\n this.currentSnapshot = currentSnapshot;\n this.newSnapshot = newSnapshot;\n this.isPreview = isPreview;\n this.willRender = willRender;\n this.renderElement = renderElement;\n this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n }\n get shouldRender() {\n return true;\n }\n get reloadReason() {\n return;\n }\n prepareToRender() {\n return;\n }\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n async preservingPermanentElements(callback) {\n await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n }\n focusFirstAutofocusableElement() {\n const element = this.connectedSnapshot.firstAutofocusableElement;\n if (elementIsFocusable(element)) {\n element.focus();\n }\n }\n enteringBardo(currentPermanentElement) {\n if (this.activeElement)\n return;\n if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n this.activeElement = this.currentSnapshot.activeElement;\n }\n }\n leavingBardo(currentPermanentElement) {\n if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {\n this.activeElement.focus();\n this.activeElement = null;\n }\n }\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n }\n get currentElement() {\n return this.currentSnapshot.element;\n }\n get newElement() {\n return this.newSnapshot.element;\n }\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n }\n}\nfunction elementIsFocusable(element) {\n return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n var _a;\n const destinationRange = document.createRange();\n destinationRange.selectNodeContents(currentElement);\n destinationRange.deleteContents();\n const frameElement = newElement;\n const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n currentElement.appendChild(sourceRange.extractContents());\n }\n }\n constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n this.delegate = delegate;\n }\n get shouldRender() {\n return true;\n }\n async render() {\n await nextAnimationFrame();\n this.preservingPermanentElements(() => {\n this.loadFrameElement();\n });\n this.scrollFrameIntoView();\n await nextAnimationFrame();\n this.focusFirstAutofocusableElement();\n await nextAnimationFrame();\n this.activateScriptElements();\n }\n loadFrameElement() {\n this.delegate.willRenderFrame(this.currentElement, this.newElement);\n this.renderElement(this.currentElement, this.newElement);\n }\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild;\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n if (element) {\n element.scrollIntoView({ block, behavior });\n return true;\n }\n }\n return false;\n }\n activateScriptElements() {\n for (const inertScriptElement of this.newScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n get newScriptElements() {\n return this.currentElement.querySelectorAll(\"script\");\n }\n}\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value;\n }\n else {\n return defaultValue;\n }\n}\nfunction readScrollBehavior(value, defaultValue) {\n if (value == \"auto\" || value == \"smooth\") {\n return value;\n }\n else {\n return defaultValue;\n }\n}\n\nclass ProgressBar {\n static get defaultCSS() {\n return unindent `\n .turbo-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 2147483647;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `;\n }\n constructor() {\n this.hiding = false;\n this.value = 0;\n this.visible = false;\n this.trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n };\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\n }\n }\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(() => {\n this.uninstallProgressElement();\n this.stopTrickling();\n this.visible = false;\n this.hiding = false;\n });\n }\n }\n setValue(value) {\n this.value = value;\n this.refresh();\n }\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }\n installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + this.value * 90}%`;\n });\n }\n createStylesheetElement() {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n if (this.cspNonce) {\n element.nonce = this.cspNonce;\n }\n return element;\n }\n createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element;\n }\n get cspNonce() {\n return getMetaContent(\"csp-nonce\");\n }\n}\nProgressBar.animationDuration = 300;\n\nclass HeadSnapshot extends Snapshot {\n constructor() {\n super(...arguments);\n this.detailsByOuterHTML = this.children\n .filter((element) => !elementIsNoscript(element))\n .map((element) => elementWithoutNonce(element))\n .reduce((result, element) => {\n const { outerHTML } = element;\n const details = outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: [],\n };\n return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });\n }, {});\n }\n get trackedElementSignature() {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\");\n }\n getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n }\n getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n }\n getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element);\n }\n get provisionalElements() {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n if (type == null && !tracked) {\n return [...result, ...elements];\n }\n else if (elements.length > 1) {\n return [...result, ...elements.slice(1)];\n }\n else {\n return result;\n }\n }, []);\n }\n getMetaValue(name) {\n const element = this.findMetaElementByName(name);\n return element ? element.getAttribute(\"content\") : null;\n }\n findMetaElementByName(name) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { elements: [element], } = this.detailsByOuterHTML[outerHTML];\n return elementIsMetaElementWithName(element, name) ? element : result;\n }, undefined);\n }\n}\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\";\n }\n else if (elementIsStylesheet(element)) {\n return \"stylesheet\";\n }\n}\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\nfunction elementIsScript(element) {\n const tagName = element.localName;\n return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n const tagName = element.localName;\n return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n const tagName = element.localName;\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\");\n}\nfunction elementIsMetaElementWithName(element, name) {\n const tagName = element.localName;\n return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n return element;\n}\n\nclass PageSnapshot extends Snapshot {\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html));\n }\n static fromElement(element) {\n return this.fromDocument(element.ownerDocument);\n }\n static fromDocument({ head, body }) {\n return new this(body, new HeadSnapshot(head));\n }\n constructor(element, headSnapshot) {\n super(element);\n this.headSnapshot = headSnapshot;\n }\n clone() {\n const clonedElement = this.element.cloneNode(true);\n const selectElements = this.element.querySelectorAll(\"select\");\n const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n for (const [index, source] of selectElements.entries()) {\n const clone = clonedSelectElements[index];\n for (const option of clone.selectedOptions)\n option.selected = false;\n for (const option of source.selectedOptions)\n clone.options[option.index].selected = true;\n }\n for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n clonedPasswordInput.value = \"\";\n }\n return new PageSnapshot(clonedElement, this.headSnapshot);\n }\n get headElement() {\n return this.headSnapshot.element;\n }\n get rootLocation() {\n var _a;\n const root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n return expandURL(root);\n }\n get cacheControlValue() {\n return this.getSetting(\"cache-control\");\n }\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\";\n }\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\";\n }\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\";\n }\n getSetting(name) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`);\n }\n}\n\nvar TimingMetric;\n(function (TimingMetric) {\n TimingMetric[\"visitStart\"] = \"visitStart\";\n TimingMetric[\"requestStart\"] = \"requestStart\";\n TimingMetric[\"requestEnd\"] = \"requestEnd\";\n TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\nvar VisitState;\n(function (VisitState) {\n VisitState[\"initialized\"] = \"initialized\";\n VisitState[\"started\"] = \"started\";\n VisitState[\"canceled\"] = \"canceled\";\n VisitState[\"failed\"] = \"failed\";\n VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\nconst defaultOptions = {\n action: \"advance\",\n historyChanged: false,\n visitCachedSnapshot: () => { },\n willRender: true,\n updateHistory: true,\n shouldCacheSnapshot: true,\n acceptsStreamResponse: false,\n};\nvar SystemStatusCode;\n(function (SystemStatusCode) {\n SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\nclass Visit {\n constructor(delegate, location, restorationIdentifier, options = {}) {\n this.identifier = uuid();\n this.timingMetrics = {};\n this.followedRedirect = false;\n this.historyChanged = false;\n this.scrolled = false;\n this.shouldCacheSnapshot = true;\n this.acceptsStreamResponse = false;\n this.snapshotCached = false;\n this.state = VisitState.initialized;\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n const { action, historyChanged, referrer, snapshot, snapshotHTML, response, visitCachedSnapshot, willRender, updateHistory, shouldCacheSnapshot, acceptsStreamResponse, } = Object.assign(Object.assign({}, defaultOptions), options);\n this.action = action;\n this.historyChanged = historyChanged;\n this.referrer = referrer;\n this.snapshot = snapshot;\n this.snapshotHTML = snapshotHTML;\n this.response = response;\n this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n this.visitCachedSnapshot = visitCachedSnapshot;\n this.willRender = willRender;\n this.updateHistory = updateHistory;\n this.scrolled = !willRender;\n this.shouldCacheSnapshot = shouldCacheSnapshot;\n this.acceptsStreamResponse = acceptsStreamResponse;\n }\n get adapter() {\n return this.delegate.adapter;\n }\n get view() {\n return this.delegate.view;\n }\n get history() {\n return this.delegate.history;\n }\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n }\n get silent() {\n return this.isSamePage;\n }\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n this.delegate.visitStarted(this);\n }\n }\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel();\n }\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.state = VisitState.completed;\n this.followRedirect();\n if (!this.followedRedirect) {\n this.adapter.visitCompleted(this);\n this.delegate.visitCompleted(this);\n }\n }\n }\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n }\n }\n changeHistory() {\n var _a;\n if (!this.historyChanged && this.updateHistory) {\n const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n const method = getHistoryMethodForAction(actionForHistory);\n this.history.update(method, this.location, this.restorationIdentifier);\n this.historyChanged = true;\n }\n }\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n }\n else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n recordResponse(response = this.response) {\n this.response = response;\n if (response) {\n const { statusCode } = response;\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this);\n }\n else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response;\n this.render(async () => {\n if (this.shouldCacheSnapshot)\n this.cacheSnapshot();\n if (this.view.renderPromise)\n await this.view.renderPromise;\n if (isSuccessful(statusCode) && responseHTML != null) {\n await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender, this);\n this.performScroll();\n this.adapter.visitRendered(this);\n this.complete();\n }\n else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n this.adapter.visitRendered(this);\n this.fail();\n }\n });\n }\n }\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot;\n }\n }\n }\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML);\n }\n }\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null;\n }\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot();\n if (snapshot) {\n const isPreview = this.shouldIssueRequest();\n this.render(async () => {\n this.cacheSnapshot();\n if (this.isSamePage) {\n this.adapter.visitRendered(this);\n }\n else {\n if (this.view.renderPromise)\n await this.view.renderPromise;\n await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n this.performScroll();\n this.adapter.visitRendered(this);\n if (!isPreview) {\n this.complete();\n }\n }\n });\n }\n }\n followRedirect() {\n var _a;\n if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {\n this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n action: \"replace\",\n response: this.response,\n shouldCacheSnapshot: false,\n willRender: false,\n });\n this.followedRedirect = true;\n }\n }\n goToSamePageAnchor() {\n if (this.isSamePage) {\n this.render(async () => {\n this.cacheSnapshot();\n this.performScroll();\n this.changeHistory();\n this.adapter.visitRendered(this);\n });\n }\n }\n prepareRequest(request) {\n if (this.acceptsStreamResponse) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n requestStarted() {\n this.startRequest();\n }\n requestPreventedHandlingResponse(_request, _response) { }\n async requestSucceededWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected,\n });\n }\n else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n async requestFailedWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected,\n });\n }\n else {\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n requestErrored(_request, _error) {\n this.recordResponse({\n statusCode: SystemStatusCode.networkFailure,\n redirected: false,\n });\n }\n requestFinished() {\n this.finishRequest();\n }\n performScroll() {\n if (!this.scrolled && !this.view.forceReloaded) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n }\n else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n this.scrolled = true;\n }\n }\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData;\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true;\n }\n }\n scrollToAnchor() {\n const anchor = getAnchor(this.location);\n if (anchor != null) {\n this.view.scrollToAnchor(anchor);\n return true;\n }\n }\n recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n getTimingMetrics() {\n return Object.assign({}, this.timingMetrics);\n }\n getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState;\n case \"advance\":\n case \"restore\":\n return history.pushState;\n }\n }\n hasPreloadedResponse() {\n return typeof this.response == \"object\";\n }\n shouldIssueRequest() {\n if (this.isSamePage) {\n return false;\n }\n else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot();\n }\n else {\n return this.willRender;\n }\n }\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n this.snapshotCached = true;\n }\n }\n async render(callback) {\n this.cancelRender();\n await new Promise((resolve) => {\n this.frame = requestAnimationFrame(() => resolve());\n });\n await callback();\n delete this.frame;\n }\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n}\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300;\n}\n\nclass BrowserAdapter {\n constructor(session) {\n this.progressBar = new ProgressBar();\n this.showProgressBar = () => {\n this.progressBar.show();\n };\n this.session = session;\n }\n visitProposedToLocation(location, options) {\n this.navigator.startVisit(location, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);\n }\n visitStarted(visit) {\n this.location = visit.location;\n visit.loadCachedSnapshot();\n visit.issueRequest();\n visit.goToSamePageAnchor();\n }\n visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n }\n else {\n this.showProgressBar();\n }\n }\n visitRequestCompleted(visit) {\n visit.loadResponse();\n }\n visitRequestFailedWithStatusCode(visit, statusCode) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload({\n reason: \"request_failed\",\n context: {\n statusCode,\n },\n });\n default:\n return visit.loadResponse();\n }\n }\n visitRequestFinished(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n visitCompleted(_visit) { }\n pageInvalidated(reason) {\n this.reload(reason);\n }\n visitFailed(_visit) { }\n visitRendered(_visit) { }\n formSubmissionStarted(_formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n formSubmissionFinished(_formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n hideVisitProgressBar() {\n this.progressBar.hide();\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }\n hideFormProgressBar() {\n this.progressBar.hide();\n if (this.formProgressBarTimeout != null) {\n window.clearTimeout(this.formProgressBarTimeout);\n delete this.formProgressBarTimeout;\n }\n }\n reload(reason) {\n var _a;\n dispatch(\"turbo:reload\", { detail: reason });\n window.location.href = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.toString()) || window.location.href;\n }\n get navigator() {\n return this.session.navigator;\n }\n}\n\nclass CacheObserver {\n constructor() {\n this.selector = \"[data-turbo-temporary]\";\n this.deprecatedSelector = \"[data-turbo-cache=false]\";\n this.started = false;\n this.removeTemporaryElements = ((_event) => {\n for (const element of this.temporaryElements) {\n element.remove();\n }\n });\n }\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n get temporaryElements() {\n return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation];\n }\n get temporaryElementsWithDeprecation() {\n const elements = document.querySelectorAll(this.deprecatedSelector);\n if (elements.length) {\n console.warn(`The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`);\n }\n return [...elements];\n }\n}\n\nclass FrameRedirector {\n constructor(session, element) {\n this.session = session;\n this.element = element;\n this.linkInterceptor = new LinkInterceptor(this, element);\n this.formSubmitObserver = new FormSubmitObserver(this, element);\n }\n start() {\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n stop() {\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n shouldInterceptLinkClick(element, _location, _event) {\n return this.shouldRedirect(element);\n }\n linkClickIntercepted(element, url, event) {\n const frame = this.findFrameElement(element);\n if (frame) {\n frame.delegate.linkClickIntercepted(element, url, event);\n }\n }\n willSubmitForm(element, submitter) {\n return (element.closest(\"turbo-frame\") == null &&\n this.shouldSubmit(element, submitter) &&\n this.shouldRedirect(element, submitter));\n }\n formSubmitted(element, submitter) {\n const frame = this.findFrameElement(element, submitter);\n if (frame) {\n frame.delegate.formSubmitted(element, submitter);\n }\n }\n shouldSubmit(form, submitter) {\n var _a;\n const action = getAction(form, submitter);\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n }\n shouldRedirect(element, submitter) {\n const isNavigatable = element instanceof HTMLFormElement\n ? this.session.submissionIsNavigatable(element, submitter)\n : this.session.elementIsNavigatable(element);\n if (isNavigatable) {\n const frame = this.findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false;\n }\n else {\n return false;\n }\n }\n findFrameElement(element, submitter) {\n const id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(`#${id}:not([disabled])`);\n if (frame instanceof FrameElement) {\n return frame;\n }\n }\n }\n}\n\nclass History {\n constructor(delegate) {\n this.restorationIdentifier = uuid();\n this.restorationData = {};\n this.started = false;\n this.pageLoaded = false;\n this.onPopState = (event) => {\n if (this.shouldHandlePopState()) {\n const { turbo } = event.state || {};\n if (turbo) {\n this.location = new URL(window.location.href);\n const { restorationIdentifier } = turbo;\n this.restorationIdentifier = restorationIdentifier;\n this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);\n }\n }\n };\n this.onPageLoad = async (_event) => {\n await nextMicrotask();\n this.pageLoaded = true;\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.started = true;\n this.replace(new URL(window.location.href));\n }\n }\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false);\n removeEventListener(\"load\", this.onPageLoad, false);\n this.started = false;\n }\n }\n push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n update(method, location, restorationIdentifier = uuid()) {\n const state = { turbo: { restorationIdentifier } };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {};\n }\n updateRestorationData(additionalData) {\n const { restorationIdentifier } = this;\n const restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n }\n assumeControlOfScrollRestoration() {\n var _a;\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n shouldHandlePopState() {\n return this.pageIsLoaded();\n }\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\";\n }\n}\n\nclass Navigator {\n constructor(delegate) {\n this.delegate = delegate;\n }\n proposeVisit(location, options = {}) {\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n if (locationIsVisitable(location, this.view.snapshot.rootLocation)) {\n this.delegate.visitProposedToLocation(location, options);\n }\n else {\n window.location.href = location.toString();\n }\n }\n }\n startVisit(locatable, restorationIdentifier, options = {}) {\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));\n this.currentVisit.start();\n }\n submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n this.formSubmission.start();\n }\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n get adapter() {\n return this.delegate.adapter;\n }\n get view() {\n return this.delegate.view;\n }\n get history() {\n return this.delegate.history;\n }\n formSubmissionStarted(formSubmission) {\n if (typeof this.adapter.formSubmissionStarted === \"function\") {\n this.adapter.formSubmissionStarted(formSubmission);\n }\n }\n async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const shouldCacheSnapshot = formSubmission.isSafe;\n if (!shouldCacheSnapshot) {\n this.view.clearSnapshotCache();\n }\n const { statusCode, redirected } = fetchResponse;\n const action = this.getActionForFormSubmission(formSubmission);\n const visitOptions = {\n action,\n shouldCacheSnapshot,\n response: { statusCode, responseHTML, redirected },\n };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n }\n }\n async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n if (fetchResponse.serverError) {\n await this.view.renderError(snapshot, this.currentVisit);\n }\n else {\n await this.view.renderPage(snapshot, false, true, this.currentVisit);\n }\n this.view.scrollToTop();\n this.view.clearSnapshotCache();\n }\n }\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n formSubmissionFinished(formSubmission) {\n if (typeof this.adapter.formSubmissionFinished === \"function\") {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\n }\n locationWithActionIsSamePage(location, action) {\n const anchor = getAnchor(location);\n const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n return (action !== \"replace\" &&\n getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n (isRestorationToTop || (anchor != null && anchor !== currentAnchor)));\n }\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n get location() {\n return this.history.location;\n }\n get restorationIdentifier() {\n return this.history.restorationIdentifier;\n }\n getActionForFormSubmission({ submitter, formElement }) {\n return getVisitAction(submitter, formElement) || \"advance\";\n }\n}\n\nvar PageStage;\n(function (PageStage) {\n PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\nclass PageObserver {\n constructor(delegate) {\n this.stage = PageStage.initial;\n this.started = false;\n this.interpretReadyState = () => {\n const { readyState } = this;\n if (readyState == \"interactive\") {\n this.pageIsInteractive();\n }\n else if (readyState == \"complete\") {\n this.pageIsComplete();\n }\n };\n this.pageWillUnload = () => {\n this.delegate.pageWillUnload();\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading;\n }\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n addEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n removeEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = false;\n }\n }\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\n }\n }\n pageIsComplete() {\n this.pageIsInteractive();\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete;\n this.delegate.pageLoaded();\n }\n }\n get readyState() {\n return document.readyState;\n }\n}\n\nclass ScrollObserver {\n constructor(delegate) {\n this.started = false;\n this.onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n}\n\nclass StreamMessageRenderer {\n render({ fragment }) {\n Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => document.documentElement.appendChild(fragment));\n }\n enteringBardo(currentPermanentElement, newPermanentElement) {\n newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n }\n leavingBardo() { }\n}\nfunction getPermanentElementMapForFragment(fragment) {\n const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n const permanentElementMap = {};\n for (const permanentElementInDocument of permanentElementsInDocument) {\n const { id } = permanentElementInDocument;\n for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n if (elementInStream) {\n permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n }\n }\n }\n return permanentElementMap;\n}\n\nclass StreamObserver {\n constructor(delegate) {\n this.sources = new Set();\n this.started = false;\n this.inspectFetchResponse = ((event) => {\n const response = fetchResponseFromEvent(event);\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n this.receiveMessageResponse(response);\n }\n });\n this.receiveMessageEvent = (event) => {\n if (this.started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data);\n }\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n connectStreamSource(source) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source);\n source.addEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n streamSourceIsConnected(source) {\n return this.sources.has(source);\n }\n async receiveMessageResponse(response) {\n const html = await response.responseHTML;\n if (html) {\n this.receiveMessageHTML(html);\n }\n }\n receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n }\n}\nfunction fetchResponseFromEvent(event) {\n var _a;\n const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse;\n }\n}\nfunction fetchResponseIsStream(response) {\n var _a;\n const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n return contentType.startsWith(StreamMessage.contentType);\n}\n\nclass ErrorRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const { documentElement, body } = document;\n documentElement.replaceChild(newElement, body);\n }\n async render() {\n this.replaceHeadAndBody();\n this.activateScriptElements();\n }\n replaceHeadAndBody() {\n const { documentElement, head } = document;\n documentElement.replaceChild(this.newHead, head);\n this.renderElement(this.currentElement, this.newElement);\n }\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode;\n if (parentNode) {\n const element = activateScriptElement(replaceableElement);\n parentNode.replaceChild(element, replaceableElement);\n }\n }\n }\n get newHead() {\n return this.newSnapshot.headSnapshot.element;\n }\n get scriptElements() {\n return document.documentElement.querySelectorAll(\"script\");\n }\n}\n\nclass PageRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n if (document.body && newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(newElement);\n }\n else {\n document.documentElement.appendChild(newElement);\n }\n }\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n }\n get reloadReason() {\n if (!this.newSnapshot.isVisitable) {\n return {\n reason: \"turbo_visit_control_is_reload\",\n };\n }\n if (!this.trackedElementsAreIdentical) {\n return {\n reason: \"tracked_element_mismatch\",\n };\n }\n }\n async prepareToRender() {\n await this.mergeHead();\n }\n async render() {\n if (this.willRender) {\n await this.replaceBody();\n }\n }\n finishRendering() {\n super.finishRendering();\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement();\n }\n }\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot;\n }\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot;\n }\n get newElement() {\n return this.newSnapshot.element;\n }\n async mergeHead() {\n const mergedHeadElements = this.mergeProvisionalElements();\n const newStylesheetElements = this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n await mergedHeadElements;\n await newStylesheetElements;\n }\n async replaceBody() {\n await this.preservingPermanentElements(async () => {\n this.activateNewBody();\n await this.assignNewBody();\n });\n }\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n }\n async copyNewHeadStylesheetElements() {\n const loadingElements = [];\n for (const element of this.newHeadStylesheetElements) {\n loadingElements.push(waitForLoad(element));\n document.head.appendChild(element);\n }\n await Promise.all(loadingElements);\n }\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(activateScriptElement(element));\n }\n }\n async mergeProvisionalElements() {\n const newHeadElements = [...this.newHeadProvisionalElements];\n for (const element of this.currentHeadProvisionalElements) {\n if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n document.head.removeChild(element);\n }\n }\n for (const element of newHeadElements) {\n document.head.appendChild(element);\n }\n }\n isCurrentElementInElementList(element, elementList) {\n for (const [index, newElement] of elementList.entries()) {\n if (element.tagName == \"TITLE\") {\n if (newElement.tagName != \"TITLE\") {\n continue;\n }\n if (element.innerHTML == newElement.innerHTML) {\n elementList.splice(index, 1);\n return true;\n }\n }\n if (newElement.isEqualNode(element)) {\n elementList.splice(index, 1);\n return true;\n }\n }\n return false;\n }\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element);\n }\n }\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element);\n }\n }\n activateNewBody() {\n document.adoptNode(this.newElement);\n this.activateNewBodyScriptElements();\n }\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n async assignNewBody() {\n await this.renderElement(this.currentElement, this.newElement);\n }\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements;\n }\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements;\n }\n get newBodyScriptElements() {\n return this.newElement.querySelectorAll(\"script\");\n }\n}\n\nclass SnapshotCache {\n constructor(size) {\n this.keys = [];\n this.snapshots = {};\n this.size = size;\n }\n has(location) {\n return toCacheKey(location) in this.snapshots;\n }\n get(location) {\n if (this.has(location)) {\n const snapshot = this.read(location);\n this.touch(location);\n return snapshot;\n }\n }\n put(location, snapshot) {\n this.write(location, snapshot);\n this.touch(location);\n return snapshot;\n }\n clear() {\n this.snapshots = {};\n }\n read(location) {\n return this.snapshots[toCacheKey(location)];\n }\n write(location, snapshot) {\n this.snapshots[toCacheKey(location)] = snapshot;\n }\n touch(location) {\n const key = toCacheKey(location);\n const index = this.keys.indexOf(key);\n if (index > -1)\n this.keys.splice(index, 1);\n this.keys.unshift(key);\n this.trim();\n }\n trim() {\n for (const key of this.keys.splice(this.size)) {\n delete this.snapshots[key];\n }\n }\n}\n\nclass PageView extends View {\n constructor() {\n super(...arguments);\n this.snapshotCache = new SnapshotCache(10);\n this.lastRenderedLocation = new URL(location.href);\n this.forceReloaded = false;\n }\n renderPage(snapshot, isPreview = false, willRender = true, visit) {\n const renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n if (!renderer.shouldRender) {\n this.forceReloaded = true;\n }\n else {\n visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n }\n return this.render(renderer);\n }\n renderError(snapshot, visit) {\n visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n return this.render(renderer);\n }\n clearSnapshotCache() {\n this.snapshotCache.clear();\n }\n async cacheSnapshot(snapshot = this.snapshot) {\n if (snapshot.isCacheable) {\n this.delegate.viewWillCacheSnapshot();\n const { lastRenderedLocation: location } = this;\n await nextEventLoopTick();\n const cachedSnapshot = snapshot.clone();\n this.snapshotCache.put(location, cachedSnapshot);\n return cachedSnapshot;\n }\n }\n getCachedSnapshotForLocation(location) {\n return this.snapshotCache.get(location);\n }\n get snapshot() {\n return PageSnapshot.fromElement(this.element);\n }\n}\n\nclass Preloader {\n constructor(delegate) {\n this.selector = \"a[data-turbo-preload]\";\n this.delegate = delegate;\n }\n get snapshotCache() {\n return this.delegate.navigator.view.snapshotCache;\n }\n start() {\n if (document.readyState === \"loading\") {\n return document.addEventListener(\"DOMContentLoaded\", () => {\n this.preloadOnLoadLinksForView(document.body);\n });\n }\n else {\n this.preloadOnLoadLinksForView(document.body);\n }\n }\n preloadOnLoadLinksForView(element) {\n for (const link of element.querySelectorAll(this.selector)) {\n this.preloadURL(link);\n }\n }\n async preloadURL(link) {\n const location = new URL(link.href);\n if (this.snapshotCache.has(location)) {\n return;\n }\n try {\n const response = await fetch(location.toString(), { headers: { \"VND.PREFETCH\": \"true\", Accept: \"text/html\" } });\n const responseText = await response.text();\n const snapshot = PageSnapshot.fromHTMLString(responseText);\n this.snapshotCache.put(location, snapshot);\n }\n catch (_) {\n }\n }\n}\n\nclass Session {\n constructor() {\n this.navigator = new Navigator(this);\n this.history = new History(this);\n this.preloader = new Preloader(this);\n this.view = new PageView(this, document.documentElement);\n this.adapter = new BrowserAdapter(this);\n this.pageObserver = new PageObserver(this);\n this.cacheObserver = new CacheObserver();\n this.linkClickObserver = new LinkClickObserver(this, window);\n this.formSubmitObserver = new FormSubmitObserver(this, document);\n this.scrollObserver = new ScrollObserver(this);\n this.streamObserver = new StreamObserver(this);\n this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);\n this.frameRedirector = new FrameRedirector(this, document.documentElement);\n this.streamMessageRenderer = new StreamMessageRenderer();\n this.drive = true;\n this.enabled = true;\n this.progressBarDelay = 500;\n this.started = false;\n this.formMode = \"on\";\n }\n start() {\n if (!this.started) {\n this.pageObserver.start();\n this.cacheObserver.start();\n this.formLinkClickObserver.start();\n this.linkClickObserver.start();\n this.formSubmitObserver.start();\n this.scrollObserver.start();\n this.streamObserver.start();\n this.frameRedirector.start();\n this.history.start();\n this.preloader.start();\n this.started = true;\n this.enabled = true;\n }\n }\n disable() {\n this.enabled = false;\n }\n stop() {\n if (this.started) {\n this.pageObserver.stop();\n this.cacheObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkClickObserver.stop();\n this.formSubmitObserver.stop();\n this.scrollObserver.stop();\n this.streamObserver.stop();\n this.frameRedirector.stop();\n this.history.stop();\n this.started = false;\n }\n }\n registerAdapter(adapter) {\n this.adapter = adapter;\n }\n visit(location, options = {}) {\n const frameElement = options.frame ? document.getElementById(options.frame) : null;\n if (frameElement instanceof FrameElement) {\n frameElement.src = location.toString();\n frameElement.loaded;\n }\n else {\n this.navigator.proposeVisit(expandURL(location), options);\n }\n }\n connectStreamSource(source) {\n this.streamObserver.connectStreamSource(source);\n }\n disconnectStreamSource(source) {\n this.streamObserver.disconnectStreamSource(source);\n }\n renderStreamMessage(message) {\n this.streamMessageRenderer.render(StreamMessage.wrap(message));\n }\n clearCache() {\n this.view.clearSnapshotCache();\n }\n setProgressBarDelay(delay) {\n this.progressBarDelay = delay;\n }\n setFormMode(mode) {\n this.formMode = mode;\n }\n get location() {\n return this.history.location;\n }\n get restorationIdentifier() {\n return this.history.restorationIdentifier;\n }\n historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n if (this.enabled) {\n this.navigator.startVisit(location, restorationIdentifier, {\n action: \"restore\",\n historyChanged: true,\n });\n }\n else {\n this.adapter.pageInvalidated({\n reason: \"turbo_disabled\",\n });\n }\n }\n scrollPositionChanged(position) {\n this.history.updateRestorationData({ scrollPosition: position });\n }\n willSubmitFormLinkToLocation(link, location) {\n return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation);\n }\n submittedFormLinkToLocation() { }\n willFollowLinkToLocation(link, location, event) {\n return (this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation) &&\n this.applicationAllowsFollowingLinkToLocation(link, location, event));\n }\n followedLinkToLocation(link, location) {\n const action = this.getActionForLink(link);\n const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n this.visit(location.href, { action, acceptsStreamResponse });\n }\n allowsVisitingLocationWithAction(location, action) {\n return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n }\n visitProposedToLocation(location, options) {\n extendURLWithDeprecatedProperties(location);\n this.adapter.visitProposedToLocation(location, options);\n }\n visitStarted(visit) {\n if (!visit.acceptsStreamResponse) {\n markAsBusy(document.documentElement);\n }\n extendURLWithDeprecatedProperties(visit.location);\n if (!visit.silent) {\n this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n }\n }\n visitCompleted(visit) {\n clearBusyState(document.documentElement);\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n locationWithActionIsSamePage(location, action) {\n return this.navigator.locationWithActionIsSamePage(location, action);\n }\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n }\n willSubmitForm(form, submitter) {\n const action = getAction(form, submitter);\n return (this.submissionIsNavigatable(form, submitter) &&\n locationIsVisitable(expandURL(action), this.snapshot.rootLocation));\n }\n formSubmitted(form, submitter) {\n this.navigator.submitForm(form, submitter);\n }\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location;\n this.notifyApplicationAfterPageLoad();\n }\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration();\n }\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration();\n }\n receivedMessageFromStream(message) {\n this.renderStreamMessage(message);\n }\n viewWillCacheSnapshot() {\n var _a;\n if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n this.notifyApplicationBeforeCachingSnapshot();\n }\n }\n allowsImmediateRender({ element }, options) {\n const event = this.notifyApplicationBeforeRender(element, options);\n const { defaultPrevented, detail: { render }, } = event;\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n return !defaultPrevented;\n }\n viewRenderedSnapshot(_snapshot, _isPreview) {\n this.view.lastRenderedLocation = this.history.location;\n this.notifyApplicationAfterRender();\n }\n preloadOnLoadLinksForView(element) {\n this.preloader.preloadOnLoadLinksForView(element);\n }\n viewInvalidated(reason) {\n this.adapter.pageInvalidated(reason);\n }\n frameLoaded(frame) {\n this.notifyApplicationAfterFrameLoad(frame);\n }\n frameRendered(fetchResponse, frame) {\n this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n }\n applicationAllowsFollowingLinkToLocation(link, location, ev) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n return !event.defaultPrevented;\n }\n applicationAllowsVisitingLocation(location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented;\n }\n notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n return dispatch(\"turbo:click\", {\n target: link,\n detail: { url: location.href, originalEvent: event },\n cancelable: true,\n });\n }\n notifyApplicationBeforeVisitingLocation(location) {\n return dispatch(\"turbo:before-visit\", {\n detail: { url: location.href },\n cancelable: true,\n });\n }\n notifyApplicationAfterVisitingLocation(location, action) {\n return dispatch(\"turbo:visit\", { detail: { url: location.href, action } });\n }\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\");\n }\n notifyApplicationBeforeRender(newBody, options) {\n return dispatch(\"turbo:before-render\", {\n detail: Object.assign({ newBody }, options),\n cancelable: true,\n });\n }\n notifyApplicationAfterRender() {\n return dispatch(\"turbo:render\");\n }\n notifyApplicationAfterPageLoad(timing = {}) {\n return dispatch(\"turbo:load\", {\n detail: { url: this.location.href, timing },\n });\n }\n notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n dispatchEvent(new HashChangeEvent(\"hashchange\", {\n oldURL: oldURL.toString(),\n newURL: newURL.toString(),\n }));\n }\n notifyApplicationAfterFrameLoad(frame) {\n return dispatch(\"turbo:frame-load\", { target: frame });\n }\n notifyApplicationAfterFrameRender(fetchResponse, frame) {\n return dispatch(\"turbo:frame-render\", {\n detail: { fetchResponse },\n target: frame,\n cancelable: true,\n });\n }\n submissionIsNavigatable(form, submitter) {\n if (this.formMode == \"off\") {\n return false;\n }\n else {\n const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n if (this.formMode == \"optin\") {\n return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null;\n }\n else {\n return submitterIsNavigatable && this.elementIsNavigatable(form);\n }\n }\n }\n elementIsNavigatable(element) {\n const container = findClosestRecursively(element, \"[data-turbo]\");\n const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n if (this.drive || withinFrame) {\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\";\n }\n else {\n return true;\n }\n }\n else {\n if (container) {\n return container.getAttribute(\"data-turbo\") == \"true\";\n }\n else {\n return false;\n }\n }\n }\n getActionForLink(link) {\n return getVisitAction(link) || \"advance\";\n }\n get snapshot() {\n return this.view.snapshot;\n }\n}\nfunction extendURLWithDeprecatedProperties(url) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString();\n },\n },\n};\n\nclass Cache {\n constructor(session) {\n this.session = session;\n }\n clear() {\n this.session.clearCache();\n }\n resetCacheControl() {\n this.setCacheControl(\"\");\n }\n exemptPageFromCache() {\n this.setCacheControl(\"no-cache\");\n }\n exemptPageFromPreview() {\n this.setCacheControl(\"no-preview\");\n }\n setCacheControl(value) {\n setMetaContent(\"turbo-cache-control\", value);\n }\n}\n\nconst StreamActions = {\n after() {\n this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling); });\n },\n append() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.append(this.templateContent));\n },\n before() {\n this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e); });\n },\n prepend() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.prepend(this.templateContent));\n },\n remove() {\n this.targetElements.forEach((e) => e.remove());\n },\n replace() {\n this.targetElements.forEach((e) => e.replaceWith(this.templateContent));\n },\n update() {\n this.targetElements.forEach((targetElement) => {\n targetElement.innerHTML = \"\";\n targetElement.append(this.templateContent);\n });\n },\n};\n\nconst session = new Session();\nconst cache = new Cache(session);\nconst { navigator: navigator$1 } = session;\nfunction start() {\n session.start();\n}\nfunction registerAdapter(adapter) {\n session.registerAdapter(adapter);\n}\nfunction visit(location, options) {\n session.visit(location, options);\n}\nfunction connectStreamSource(source) {\n session.connectStreamSource(source);\n}\nfunction disconnectStreamSource(source) {\n session.disconnectStreamSource(source);\n}\nfunction renderStreamMessage(message) {\n session.renderStreamMessage(message);\n}\nfunction clearCache() {\n console.warn(\"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\");\n session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n FormSubmission.confirmMethod = confirmMethod;\n}\nfunction setFormMode(mode) {\n session.setFormMode(mode);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n __proto__: null,\n navigator: navigator$1,\n session: session,\n cache: cache,\n PageRenderer: PageRenderer,\n PageSnapshot: PageSnapshot,\n FrameRenderer: FrameRenderer,\n start: start,\n registerAdapter: registerAdapter,\n visit: visit,\n connectStreamSource: connectStreamSource,\n disconnectStreamSource: disconnectStreamSource,\n renderStreamMessage: renderStreamMessage,\n clearCache: clearCache,\n setProgressBarDelay: setProgressBarDelay,\n setConfirmMethod: setConfirmMethod,\n setFormMode: setFormMode,\n StreamActions: StreamActions\n});\n\nclass TurboFrameMissingError extends Error {\n}\n\nclass FrameController {\n constructor(element) {\n this.fetchResponseLoaded = (_fetchResponse) => { };\n this.currentFetchRequest = null;\n this.resolveVisitPromise = () => { };\n this.connected = false;\n this.hasBeenLoaded = false;\n this.ignoredAttributes = new Set();\n this.action = null;\n this.visitCachedSnapshot = ({ element }) => {\n const frame = element.querySelector(\"#\" + this.element.id);\n if (frame && this.previousFrameElement) {\n frame.replaceChildren(...this.previousFrameElement.children);\n }\n delete this.previousFrameElement;\n };\n this.element = element;\n this.view = new FrameView(this, this.element);\n this.appearanceObserver = new AppearanceObserver(this, this.element);\n this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n this.linkInterceptor = new LinkInterceptor(this, this.element);\n this.restorationIdentifier = uuid();\n this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n }\n connect() {\n if (!this.connected) {\n this.connected = true;\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n }\n else {\n this.loadSourceURL();\n }\n this.formLinkClickObserver.start();\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n }\n disconnect() {\n if (this.connected) {\n this.connected = false;\n this.appearanceObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n }\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.loadSourceURL();\n }\n }\n sourceURLChanged() {\n if (this.isIgnoringChangesTo(\"src\"))\n return;\n if (this.element.isConnected) {\n this.complete = false;\n }\n if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n this.loadSourceURL();\n }\n }\n sourceURLReloaded() {\n const { src } = this.element;\n this.ignoringChangesToAttribute(\"complete\", () => {\n this.element.removeAttribute(\"complete\");\n });\n this.element.src = null;\n this.element.src = src;\n return this.element.loaded;\n }\n completeChanged() {\n if (this.isIgnoringChangesTo(\"complete\"))\n return;\n this.loadSourceURL();\n }\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n }\n else {\n this.appearanceObserver.stop();\n this.loadSourceURL();\n }\n }\n async loadSourceURL() {\n if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n this.element.loaded = this.visit(expandURL(this.sourceURL));\n this.appearanceObserver.stop();\n await this.element.loaded;\n this.hasBeenLoaded = true;\n }\n }\n async loadResponse(fetchResponse) {\n if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n this.sourceURL = fetchResponse.response.url;\n }\n try {\n const html = await fetchResponse.responseHTML;\n if (html) {\n const document = parseHTMLDocument(html);\n const pageSnapshot = PageSnapshot.fromDocument(document);\n if (pageSnapshot.isVisitable) {\n await this.loadFrameResponse(fetchResponse, document);\n }\n else {\n await this.handleUnvisitableFrameResponse(fetchResponse);\n }\n }\n }\n finally {\n this.fetchResponseLoaded = () => { };\n }\n }\n elementAppearedInViewport(element) {\n this.proposeVisitIfNavigatedWithAction(element, element);\n this.loadSourceURL();\n }\n willSubmitFormLinkToLocation(link) {\n return this.shouldInterceptNavigation(link);\n }\n submittedFormLinkToLocation(link, _location, form) {\n const frame = this.findFrameElement(link);\n if (frame)\n form.setAttribute(\"data-turbo-frame\", frame.id);\n }\n shouldInterceptLinkClick(element, _location, _event) {\n return this.shouldInterceptNavigation(element);\n }\n linkClickIntercepted(element, location) {\n this.navigateFrame(element, location);\n }\n willSubmitForm(element, submitter) {\n return element.closest(\"turbo-frame\") == this.element && this.shouldInterceptNavigation(element, submitter);\n }\n formSubmitted(element, submitter) {\n if (this.formSubmission) {\n this.formSubmission.stop();\n }\n this.formSubmission = new FormSubmission(this, element, submitter);\n const { fetchRequest } = this.formSubmission;\n this.prepareRequest(fetchRequest);\n this.formSubmission.start();\n }\n prepareRequest(request) {\n var _a;\n request.headers[\"Turbo-Frame\"] = this.id;\n if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"data-turbo-stream\")) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n requestStarted(_request) {\n markAsBusy(this.element);\n }\n requestPreventedHandlingResponse(_request, _response) {\n this.resolveVisitPromise();\n }\n async requestSucceededWithResponse(request, response) {\n await this.loadResponse(response);\n this.resolveVisitPromise();\n }\n async requestFailedWithResponse(request, response) {\n await this.loadResponse(response);\n this.resolveVisitPromise();\n }\n requestErrored(request, error) {\n console.error(error);\n this.resolveVisitPromise();\n }\n requestFinished(_request) {\n clearBusyState(this.element);\n }\n formSubmissionStarted({ formElement }) {\n markAsBusy(formElement, this.findFrameElement(formElement));\n }\n formSubmissionSucceededWithResponse(formSubmission, response) {\n const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n frame.delegate.loadResponse(response);\n if (!formSubmission.isSafe) {\n session.clearCache();\n }\n }\n formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\n session.clearCache();\n }\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n formSubmissionFinished({ formElement }) {\n clearBusyState(formElement, this.findFrameElement(formElement));\n }\n allowsImmediateRender({ element: newFrame }, options) {\n const event = dispatch(\"turbo:before-frame-render\", {\n target: this.element,\n detail: Object.assign({ newFrame }, options),\n cancelable: true,\n });\n const { defaultPrevented, detail: { render }, } = event;\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n return !defaultPrevented;\n }\n viewRenderedSnapshot(_snapshot, _isPreview) { }\n preloadOnLoadLinksForView(element) {\n session.preloadOnLoadLinksForView(element);\n }\n viewInvalidated() { }\n willRenderFrame(currentElement, _newElement) {\n this.previousFrameElement = currentElement.cloneNode(true);\n }\n async loadFrameResponse(fetchResponse, document) {\n const newFrameElement = await this.extractForeignFrameElement(document.body);\n if (newFrameElement) {\n const snapshot = new Snapshot(newFrameElement);\n const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n if (this.view.renderPromise)\n await this.view.renderPromise;\n this.changeHistory();\n await this.view.render(renderer);\n this.complete = true;\n session.frameRendered(fetchResponse, this.element);\n session.frameLoaded(this.element);\n this.fetchResponseLoaded(fetchResponse);\n }\n else if (this.willHandleFrameMissingFromResponse(fetchResponse)) {\n this.handleFrameMissingFromResponse(fetchResponse);\n }\n }\n async visit(url) {\n var _a;\n const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n this.currentFetchRequest = request;\n return new Promise((resolve) => {\n this.resolveVisitPromise = () => {\n this.resolveVisitPromise = () => { };\n this.currentFetchRequest = null;\n resolve();\n };\n request.perform();\n });\n }\n navigateFrame(element, url, submitter) {\n const frame = this.findFrameElement(element, submitter);\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n this.withCurrentNavigationElement(element, () => {\n frame.src = url;\n });\n }\n proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n this.action = getVisitAction(submitter, element, frame);\n if (this.action) {\n const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n const { visitCachedSnapshot } = frame.delegate;\n frame.delegate.fetchResponseLoaded = (fetchResponse) => {\n if (frame.src) {\n const { statusCode, redirected } = fetchResponse;\n const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n const response = { statusCode, redirected, responseHTML };\n const options = {\n response,\n visitCachedSnapshot,\n willRender: false,\n updateHistory: false,\n restorationIdentifier: this.restorationIdentifier,\n snapshot: pageSnapshot,\n };\n if (this.action)\n options.action = this.action;\n session.visit(frame.src, options);\n }\n };\n }\n }\n changeHistory() {\n if (this.action) {\n const method = getHistoryMethodForAction(this.action);\n session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n }\n }\n async handleUnvisitableFrameResponse(fetchResponse) {\n console.warn(`The response (${fetchResponse.statusCode}) from is performing a full page visit due to turbo-visit-control.`);\n await this.visitResponse(fetchResponse.response);\n }\n willHandleFrameMissingFromResponse(fetchResponse) {\n this.element.setAttribute(\"complete\", \"\");\n const response = fetchResponse.response;\n const visit = async (url, options = {}) => {\n if (url instanceof Response) {\n this.visitResponse(url);\n }\n else {\n session.visit(url, options);\n }\n };\n const event = dispatch(\"turbo:frame-missing\", {\n target: this.element,\n detail: { response, visit },\n cancelable: true,\n });\n return !event.defaultPrevented;\n }\n handleFrameMissingFromResponse(fetchResponse) {\n this.view.missing();\n this.throwFrameMissingError(fetchResponse);\n }\n throwFrameMissingError(fetchResponse) {\n const message = `The response (${fetchResponse.statusCode}) did not contain the expected and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n throw new TurboFrameMissingError(message);\n }\n async visitResponse(response) {\n const wrapped = new FetchResponse(response);\n const responseHTML = await wrapped.responseHTML;\n const { location, redirected, statusCode } = wrapped;\n return session.visit(location, { response: { redirected, statusCode, responseHTML } });\n }\n findFrameElement(element, submitter) {\n var _a;\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n }\n async extractForeignFrameElement(container) {\n let element;\n const id = CSS.escape(this.id);\n try {\n element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n if (element) {\n return element;\n }\n element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n if (element) {\n await element.loaded;\n return await this.extractForeignFrameElement(element);\n }\n }\n catch (error) {\n console.error(error);\n return new FrameElement();\n }\n return null;\n }\n formActionIsVisitable(form, submitter) {\n const action = getAction(form, submitter);\n return locationIsVisitable(expandURL(action), this.rootLocation);\n }\n shouldInterceptNavigation(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {\n return false;\n }\n if (!this.enabled || id == \"_top\") {\n return false;\n }\n if (id) {\n const frameElement = getFrameElementById(id);\n if (frameElement) {\n return !frameElement.disabled;\n }\n }\n if (!session.elementIsNavigatable(element)) {\n return false;\n }\n if (submitter && !session.elementIsNavigatable(submitter)) {\n return false;\n }\n return true;\n }\n get id() {\n return this.element.id;\n }\n get enabled() {\n return !this.element.disabled;\n }\n get sourceURL() {\n if (this.element.src) {\n return this.element.src;\n }\n }\n set sourceURL(sourceURL) {\n this.ignoringChangesToAttribute(\"src\", () => {\n this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n });\n }\n get loadingStyle() {\n return this.element.loading;\n }\n get isLoading() {\n return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n }\n get complete() {\n return this.element.hasAttribute(\"complete\");\n }\n set complete(value) {\n this.ignoringChangesToAttribute(\"complete\", () => {\n if (value) {\n this.element.setAttribute(\"complete\", \"\");\n }\n else {\n this.element.removeAttribute(\"complete\");\n }\n });\n }\n get isActive() {\n return this.element.isActive && this.connected;\n }\n get rootLocation() {\n var _a;\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n return expandURL(root);\n }\n isIgnoringChangesTo(attributeName) {\n return this.ignoredAttributes.has(attributeName);\n }\n ignoringChangesToAttribute(attributeName, callback) {\n this.ignoredAttributes.add(attributeName);\n callback();\n this.ignoredAttributes.delete(attributeName);\n }\n withCurrentNavigationElement(element, callback) {\n this.currentNavigationElement = element;\n callback();\n delete this.currentNavigationElement;\n }\n}\nfunction getFrameElementById(id) {\n if (id != null) {\n const element = document.getElementById(id);\n if (element instanceof FrameElement) {\n return element;\n }\n }\n}\nfunction activateElement(element, currentURL) {\n if (element) {\n const src = element.getAttribute(\"src\");\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(`Matching element has a source URL which references itself`);\n }\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true);\n }\n if (element instanceof FrameElement) {\n element.connectedCallback();\n element.disconnectedCallback();\n return element;\n }\n }\n}\n\nclass StreamElement extends HTMLElement {\n static async renderElement(newElement) {\n await newElement.performAction();\n }\n async connectedCallback() {\n try {\n await this.render();\n }\n catch (error) {\n console.error(error);\n }\n finally {\n this.disconnect();\n }\n }\n async render() {\n var _a;\n return ((_a = this.renderPromise) !== null && _a !== void 0 ? _a : (this.renderPromise = (async () => {\n const event = this.beforeRenderEvent;\n if (this.dispatchEvent(event)) {\n await nextAnimationFrame();\n await event.detail.render(this);\n }\n })()));\n }\n disconnect() {\n try {\n this.remove();\n }\n catch (_a) { }\n }\n removeDuplicateTargetChildren() {\n this.duplicateChildren.forEach((c) => c.remove());\n }\n get duplicateChildren() {\n var _a;\n const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n const newChildrenIds = [...(((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children) || [])].filter((c) => !!c.id).map((c) => c.id);\n return existingChildren.filter((c) => newChildrenIds.includes(c.id));\n }\n get performAction() {\n if (this.action) {\n const actionFunction = StreamActions[this.action];\n if (actionFunction) {\n return actionFunction;\n }\n this.raise(\"unknown action\");\n }\n this.raise(\"action attribute is missing\");\n }\n get targetElements() {\n if (this.target) {\n return this.targetElementsById;\n }\n else if (this.targets) {\n return this.targetElementsByQuery;\n }\n else {\n this.raise(\"target or targets attribute is missing\");\n }\n }\n get templateContent() {\n return this.templateElement.content.cloneNode(true);\n }\n get templateElement() {\n if (this.firstElementChild === null) {\n const template = this.ownerDocument.createElement(\"template\");\n this.appendChild(template);\n return template;\n }\n else if (this.firstElementChild instanceof HTMLTemplateElement) {\n return this.firstElementChild;\n }\n this.raise(\"first child element must be a