diff --git a/dotfiles/.vscode-oss/extensions/extensions.json b/dotfiles/.vscode-oss/extensions/extensions.json
index e2571bbf..1f7ccf75 100644
--- a/dotfiles/.vscode-oss/extensions/extensions.json
+++ b/dotfiles/.vscode-oss/extensions/extensions.json
@@ -1 +1 @@
-[{"identifier":{"id":"piousdeer.adwaita-theme","uuid":"93fbc635-4a9a-4ff1-88ba-bf017484c602"},"version":"1.1.0","location":{"$mid":1,"path":"/home/trude/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal","scheme":"file"},"relativeLocation":"piousdeer.adwaita-theme-1.1.0-universal","metadata":{"id":"93fbc635-4a9a-4ff1-88ba-bf017484c602","publisherId":"93befe42-7314-4d14-8724-19419a27ed64","publisherDisplayName":"piousdeer","targetPlatform":"universal","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"installedTimestamp":1714048423200,"pinned":false,"source":"gallery"}},{"identifier":{"id":"oderwat.indent-rainbow","uuid":"eaa2127d-cb69-4ab9-8505-a60c9ee5f28b"},"version":"8.3.1","location":{"$mid":1,"fsPath":"/home/trude/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal","external":"file:///home/trude/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal","path":"/home/trude/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal","scheme":"file"},"relativeLocation":"oderwat.indent-rainbow-8.3.1-universal","metadata":{"id":"eaa2127d-cb69-4ab9-8505-a60c9ee5f28b","publisherId":"ac064ae0-224d-4351-9aa4-45ef7bf3ed21","publisherDisplayName":"oderwat","targetPlatform":"universal","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"installedTimestamp":1714048433635,"pinned":false,"source":"gallery"}}]
\ No newline at end of file
+[{"identifier":{"id":"piousdeer.adwaita-theme","uuid":"93fbc635-4a9a-4ff1-88ba-bf017484c602"},"version":"1.1.0","location":{"$mid":1,"path":"/home/trude/.vscode-oss/extensions/piousdeer.adwaita-theme-1.1.0-universal","scheme":"file"},"relativeLocation":"piousdeer.adwaita-theme-1.1.0-universal","metadata":{"id":"93fbc635-4a9a-4ff1-88ba-bf017484c602","publisherId":"93befe42-7314-4d14-8724-19419a27ed64","publisherDisplayName":"piousdeer","targetPlatform":"universal","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"installedTimestamp":1714048423200,"pinned":false,"source":"gallery"}},{"identifier":{"id":"oderwat.indent-rainbow","uuid":"eaa2127d-cb69-4ab9-8505-a60c9ee5f28b"},"version":"8.3.1","location":{"$mid":1,"path":"/home/trude/.vscode-oss/extensions/oderwat.indent-rainbow-8.3.1-universal","scheme":"file"},"relativeLocation":"oderwat.indent-rainbow-8.3.1-universal","metadata":{"id":"eaa2127d-cb69-4ab9-8505-a60c9ee5f28b","publisherId":"ac064ae0-224d-4351-9aa4-45ef7bf3ed21","publisherDisplayName":"oderwat","targetPlatform":"universal","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"installedTimestamp":1714048433635,"pinned":false,"source":"gallery"}},{"identifier":{"id":"yandeu.five-server","uuid":"a18a6705-5a6a-4e14-a4a7-3efa6b7647d5"},"version":"0.3.1","location":{"$mid":1,"fsPath":"/home/trude/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal","external":"file:///home/trude/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal","path":"/home/trude/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal","scheme":"file"},"relativeLocation":"yandeu.five-server-0.3.1-universal","metadata":{"id":"a18a6705-5a6a-4e14-a4a7-3efa6b7647d5","publisherId":"a342b7ab-2d58-4313-9c2d-f506bb2aa10c","publisherDisplayName":"yandeu","targetPlatform":"universal","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"installedTimestamp":1714049361078,"pinned":false,"source":"gallery"}}]
\ No newline at end of file
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/.vsixmanifest b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/.vsixmanifest
new file mode 100644
index 00000000..009a2c31
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/.vsixmanifest
@@ -0,0 +1,47 @@
+
+
+
+
+ Live Server (Five Server)
+ A better Live Server with instant updates, highlights and some PHP support.
+ remote,browser,development,tool,html,php,http,live,instant,server,cli,preview,reload,refresh,update,highlight,live-server,live server,keybindings,__sponsor_extension
+ Other
+ Public
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ extension/LICENSE.txt
+ extension/img/icon-star.png
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/CHANGELOG.md b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/CHANGELOG.md
new file mode 100644
index 00000000..78e81b69
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/CHANGELOG.md
@@ -0,0 +1,13 @@
+# Change Log
+
+_There will be no change log while < v1.0.0_
+
+---
+
+All notable changes to the "Five Server" extension will be documented in this file.
+
+Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
+
+## [Unreleased]
+
+- Initial release
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/LICENSE.txt b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/LICENSE.txt
new file mode 100644
index 00000000..f3790efb
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/LICENSE.txt
@@ -0,0 +1,40 @@
+Five Server License
+
+Copyright (C) 2021, Yannick Deubel (https://github.com/yandeu)
+All rights reserved.
+
+This file is part of the "Five Server" project.
+
+1. DEFINITIONS
+ a) "Licensor" is Yannick Deubel (https://github.com/yandeu).
+ b) "Software" is the software known as Five Server.
+
+2. RESTRICTIONS
+You are NOT permitted to:
+ a) Edit, alter, modify, adapt, translate or otherwise change the whole or any
+ part of the Software without the express permission of the Licensor.
+ b) Decompile, disassemble or reverse engineer the Software or attempt to do
+ any such things.
+ c) Reproduce, copy, distribute, resell or otherwise use the whole or any part
+ of the Software for any commercial or non-commercial purpose.
+ d) Disable, modify or hide notifications sent by the Software.
+
+3. OWNERSHIP
+The Software, copyright, and other intellectual property rights of whatever
+nature in the Software, including any modifications made thereto are and shall
+remain the property of the Licensor.
+
+4. WARRANTY DISCLAIMER
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED.
+
+5. LIMITATION OF LIABILITY
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/README.md b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/README.md
new file mode 100644
index 00000000..9faf3d09
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/README.md
@@ -0,0 +1,164 @@
+
+
+
+
+Five Server
+
+
+ A better live server
+
+
+
+
+
+
+
+
+
+
+
+
+- ⚡️ **Updates your files instantly** while typing on your keyboard
+- ⬢ Remote displays the logs of your browser/phone in your terminal
+- 💡 Highlights the code you are working on in your browser
+- 🚀 Navigates your browser automatically to the current editing file
+- 🐘 Includes **PHP Support** for serving and live reload all your `.php` files
+- 🗄️ Supports all **Server Side Rendered Apps** like express.js
+
+
+
+
+
+
+
+## Get Started
+
+4 ways to start your live server.
+
+1. Click **Go Live** in the Status Bar (bottom of VSCode)
+2. Right-Click a Open File > **Open with Five Server**
+3. Right-Click a File in the Explorer > **Open with Five Server**
+4. Right-Click a Folder in the Explorer > **Open with Five Server (root)**
+ _(will set the current folder as root until you stop the server)_
+
+## Videos
+
+- [Instant Update](https://youtu.be/3-zKYNrxKOk)
+- [Instant Update (with PHP)](https://youtu.be/4s7q5chX-e0)
+- [New Highlight Styles](https://youtu.be/zlKxvw-vy_M)
+
+## Quick Test
+
+Something is not working? Try the simple setup below:
+
+- make sure you have uninstalled the old **Live Server**
+- check if you have the latest version
+ [](https://marketplace.visualstudio.com/items?itemName=yandeu.five-server)
+- make a new folder `www` on the desktop
+- add the `index.html` (see below)
+- open the folder `www` with VSCode
+- click on **Go Live**
+
+```html
+
+
+
+ HTML Test File
+
+
+ It works!
+
+
+```
+
+The setup above works but your project not?
+
+- Maybe because your project is on another drive?
+- Or maybe on a USB Stick or remote folder like `OneDrive` or `DropBox`?
+- Make sure you open a folder in VSCode and NOT just a single file.
+- All these things can sometimes cause issues.
+
+## About PHP
+
+Although Five Server can render, display and live reload PHP, it does not provide a full PHP server. If you want to develop a big PHP app, you manually have to link the client-side Five Server script with your PHP files. See [five-server-with-php](https://github.com/yandeu/five-server-with-php).
+
+## Features
+
+💡 Most **advanced features** are disabled by default.
+Turn them on in the settings or by configuring a `fiveserver.config.js` file in the root of your workspace.
+
+Note:
+
+- **Instant Update** & **Highlight** works with `.html` and `.php` files.
+- All remote logs will be visible in a new Terminal called "Five Server".
+- The features `highlight`, `injectBody` and `remoteLogs` are disable by default.
+- To use the `highlight` feature, `injectBody` has to be activated.
+- `injectBody` performs some simple HTML Validation. When using `injectBody`, a message will be displayed if your HTML Page is invalid.
+- To temporarily disable `highlight` for a single HTML Tag, add a **H**.
+ Example: `Don't highlight me
`
+
+Config File Example:
+
+```js
+// fiveserver.config.js
+module.exports = {
+ highlight: true, // enable highlight feature
+ injectBody: true, // enable instant update
+ remoteLogs: true, // enable remoteLogs
+ remoteLogs: "yellow", // enable remoteLogs and use the color yellow
+ injectCss: false, // disable injecting css
+ navigate: true, // enable auto-navigation
+};
+```
+
+### More Docs
+
+- Read [Five Server - Documentation](https://github.com/yandeu/five-server#documentation).
+- Read [Five Server - Config File](https://github.com/yandeu/five-server#config-file).
+- Check all available options for the **Config File** in [`/src/types.ts`](https://github.com/yandeu/five-server/blob/main/src/types.ts).
+- Check all available colors for the **remoteLogs** in [`/src/colors.ts`](https://github.com/yandeu/five-server/blob/main/src/colors.ts).
+
+### Known Issues
+
+- Sometimes `injectBody` does not work well when using inline JavaScript inside ``.
+ As a workaround, execute your inline scripts after Five Server is connected:
+
+```html
+
+```
+
+### Debug Mode
+
+Need to debug something? Set `debugVSCode` to true.
+
+```js
+// fiveserver.config.js
+module.exports = {
+ debugVSCode: true,
+};
+```
+
+## Release Notes
+
+_No release notes while < v1.0.0_
+
+## Support Five Server
+
+[](https://github.com/sponsors/yandeu)
+[](https://github.com/sponsors/yandeu?frequency=one-time&sponsor=yandeu#sponsors:~:text=%241%20one%20time)
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/client/highlight.ts b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/client/highlight.ts
new file mode 100644
index 00000000..41415802
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/client/highlight.ts
@@ -0,0 +1,407 @@
+/* eslint-disable prefer-object-spread */
+/* eslint-disable prefer-template */
+
+/**
+ * @copyright
+ * Copyright (c) 2012 - present Adobe Systems Incorporated. All rights reserved. (https://github.com/adobe)
+ * Copyright (c) 2021 Yannick Deubel (https://github.com/yandeu)
+ *
+ * @license {@link https://github.com/yandeu/five-server/blob/main/LICENSE LICENSE}
+ *
+ * @description
+ * copied from https://github.com/adobe/brackets/blob/master/src/LiveDevelopment/Agents/RemoteFunctions.js
+ * previously licensed under MIT (https://github.com/adobe/brackets/blob/master/LICENSE)
+ */
+
+let _remoteHighlight
+const HIGHLIGHT_CLASS_NAME = '__brackets-ld-highlight'
+
+const config = {
+ experimental: false, // enable experimental features
+ debug: true, // enable debug output and helpers
+ autoConnect: false, // go live automatically after startup?
+ highlight: true, // enable highlighting?
+ highlightConfig: {
+ // the highlight configuration for the Inspector
+ borderColor: { r: 255, g: 229, b: 153, a: 0.66 },
+ contentColor: { r: 111, g: 168, b: 220, a: 0.55 },
+ marginColor: { r: 246, g: 178, b: 107, a: 0.66 },
+ paddingColor: { r: 147, g: 196, b: 125, a: 0.66 },
+ showInfo: true
+ },
+ remoteHighlight: {
+ animateStartValue: {
+ 'background-color': 'rgba(0, 162, 255, 0.5)',
+ opacity: 0
+ },
+ animateEndValue: {
+ 'background-color': 'rgb(106, 171, 233)', //'rgba(0, 162, 255, 0)',
+ opacity: 0.6
+ },
+ paddingStyling: {
+ //'border-width': '1px',
+ //'border-style': 'dashed',
+ //'border-color': 'rgba(0, 162, 255, 0.5)',
+ 'background-color': 'rgb(156, 221, 156)'
+ },
+ marginStyling: {
+ 'background-color': 'rgb(255 ,177 ,95)' // 'rgba(21, 165, 255, 0.58)'
+ },
+ borderColor: 'rgba(21, 165, 255, 0.85)',
+ showPaddingMargin: true
+ }
+}
+
+// Checks if the element is in Viewport in the client browser
+function isInViewport(element) {
+ const rect = element.getBoundingClientRect()
+ const html = window.document.documentElement
+ return (
+ rect.top >= 0 &&
+ rect.left >= 0 &&
+ rect.bottom <= (window.innerHeight || html.clientHeight) &&
+ rect.right <= (window.innerWidth || html.clientWidth)
+ )
+}
+
+// set an event on a element
+function _trigger(element, name, value, autoRemove?) {
+ // MOD(yandeu): Do not automatically remove the highlight.
+ /*
+ const key = 'data-ld-' + name
+ if (value !== undefined && value !== null) {
+ element.setAttribute(key, value)
+ if (autoRemove) {
+ window.setTimeout(element.removeAttribute.bind(element, key))
+ }
+ } else {
+ element.removeAttribute(key)
+ }
+ */
+}
+
+// compute the screen offset of an element
+function _screenOffset(element) {
+ const elemBounds = element.getBoundingClientRect(),
+ body = window.document.body
+ let offsetTop, offsetLeft
+
+ if (window.getComputedStyle(body).position === 'static') {
+ offsetLeft = elemBounds.left + window.pageXOffset
+ offsetTop = elemBounds.top + window.pageYOffset
+ } else {
+ const bodyBounds = body.getBoundingClientRect()
+ offsetLeft = elemBounds.left - bodyBounds.left
+ offsetTop = elemBounds.top - bodyBounds.top
+ }
+ return { left: offsetLeft, top: offsetTop }
+}
+
+// returns the distance from the top of the closest relatively positioned parent element
+function getDocumentOffsetTop(element) {
+ return element.offsetTop + (element.offsetParent ? getDocumentOffsetTop(element.offsetParent) : 0)
+}
+
+// redraw active highlights
+function redrawHighlights() {
+ if (_remoteHighlight) {
+ _remoteHighlight.redraw()
+ }
+}
+
+let req, timeout
+const animateHighlight = function (time) {
+ if (req) {
+ window.cancelAnimationFrame(req)
+ window.clearTimeout(timeout)
+ }
+ req = window.requestAnimationFrame(redrawHighlights)
+
+ timeout = setTimeout(function () {
+ window.cancelAnimationFrame(req)
+ req = null
+ }, time * 1000)
+}
+
+export class Highlight {
+ trigger: boolean
+ elements: any[] = []
+ selector = '[data-highlight="true"]'
+
+ constructor(trigger: boolean) {
+ this.trigger = !!trigger
+ }
+
+ elementExists(element) {
+ let i
+ for (i in this.elements) {
+ if (this.elements[i] === element) {
+ return true
+ }
+ }
+ return false
+ }
+
+ makeHighlightDiv(element, doAnimation) {
+ const elementBounds = element.getBoundingClientRect(),
+ highlight = window.document.createElement('div'),
+ elementStyling = window.getComputedStyle(element),
+ transitionDuration = parseFloat(elementStyling.getPropertyValue('transition-duration')),
+ animationDuration = parseFloat(elementStyling.getPropertyValue('animation-duration'))
+
+ if (transitionDuration) {
+ animateHighlight(transitionDuration)
+ }
+
+ if (animationDuration) {
+ animateHighlight(animationDuration)
+ }
+
+ // Don't highlight elements with 0 width & height
+ if (elementBounds.width === 0 && elementBounds.height === 0) {
+ return
+ }
+
+ const realElBorder = {
+ right: elementStyling.getPropertyValue('border-right-width'),
+ left: elementStyling.getPropertyValue('border-left-width'),
+ top: elementStyling.getPropertyValue('border-top-width'),
+ bottom: elementStyling.getPropertyValue('border-bottom-width')
+ }
+
+ const borderBox = elementStyling.boxSizing === 'border-box'
+
+ let innerWidth = parseFloat(elementStyling.width),
+ innerHeight = parseFloat(elementStyling.height),
+ outerHeight = innerHeight,
+ outerWidth = innerWidth
+
+ if (!borderBox) {
+ innerWidth += parseFloat(elementStyling.paddingLeft) + parseFloat(elementStyling.paddingRight)
+ innerHeight += parseFloat(elementStyling.paddingTop) + parseFloat(elementStyling.paddingBottom)
+ ;(outerWidth = innerWidth + parseFloat(realElBorder.right) + parseFloat(realElBorder.left)),
+ (outerHeight = innerHeight + parseFloat(realElBorder.bottom) + parseFloat(realElBorder.top))
+ }
+
+ const visualizations = {
+ horizontal: 'left, right',
+ vertical: 'top, bottom'
+ }
+
+ const drawPaddingRect = function (side) {
+ const elStyling = {}
+
+ if (visualizations.horizontal.indexOf(side) >= 0) {
+ elStyling['width'] = elementStyling.getPropertyValue('padding-' + side)
+ elStyling['height'] = innerHeight + 'px'
+ elStyling['top'] = 0
+
+ if (borderBox) {
+ elStyling['height'] = innerHeight - parseFloat(realElBorder.top) - parseFloat(realElBorder.bottom) + 'px'
+ }
+ } else {
+ elStyling['height'] = elementStyling.getPropertyValue('padding-' + side)
+ elStyling['width'] = innerWidth + 'px'
+ elStyling['left'] = 0
+
+ if (borderBox) {
+ elStyling['width'] = innerWidth - parseFloat(realElBorder.left) - parseFloat(realElBorder.right) + 'px'
+ }
+ }
+
+ elStyling[side] = 0
+ elStyling['position'] = 'absolute'
+
+ return elStyling
+ }
+
+ const drawMarginRect = function (side) {
+ const elStyling = {}
+
+ const margin = []
+ margin['right'] = parseFloat(elementStyling.getPropertyValue('margin-right'))
+ margin['top'] = parseFloat(elementStyling.getPropertyValue('margin-top'))
+ margin['bottom'] = parseFloat(elementStyling.getPropertyValue('margin-bottom'))
+ margin['left'] = parseFloat(elementStyling.getPropertyValue('margin-left'))
+
+ if (visualizations['horizontal'].indexOf(side) >= 0) {
+ elStyling['width'] = elementStyling.getPropertyValue('margin-' + side)
+ elStyling['height'] = outerHeight + margin['top'] + margin['bottom'] + 'px'
+ elStyling['top'] = '-' + (margin['top'] + parseFloat(realElBorder.top)) + 'px'
+ } else {
+ elStyling['height'] = elementStyling.getPropertyValue('margin-' + side)
+ elStyling['width'] = outerWidth + 'px'
+ elStyling['left'] = '-' + realElBorder.left
+ }
+
+ elStyling[side] = '-' + (margin[side] + parseFloat(realElBorder[side])) + 'px'
+ elStyling['position'] = 'absolute'
+
+ return elStyling
+ }
+
+ const setVisibility = function (el) {
+ if (!config.remoteHighlight.showPaddingMargin || parseInt(el.height, 10) <= 0 || parseInt(el.width, 10) <= 0) {
+ el.display = 'none'
+ } else {
+ el.display = 'block'
+ }
+ }
+
+ const paddingVisualizations = [
+ drawPaddingRect('top'),
+ drawPaddingRect('right'),
+ drawPaddingRect('bottom'),
+ drawPaddingRect('left')
+ ]
+
+ const marginVisualizations = [
+ drawMarginRect('top'),
+ drawMarginRect('right'),
+ drawMarginRect('bottom'),
+ drawMarginRect('left')
+ ]
+
+ const setupVisualizations = function (arr, config) {
+ let i
+ for (i = 0; i < arr.length; i++) {
+ setVisibility(arr[i])
+
+ // Applies to every visualisationElement (padding or margin div)
+ arr[i]['transform'] = 'none'
+ const el = window.document.createElement('div'),
+ styles = Object.assign({}, config, arr[i])
+
+ _setStyleValues(styles, el.style)
+
+ highlight.appendChild(el)
+ }
+ }
+
+ setupVisualizations(marginVisualizations, config.remoteHighlight.marginStyling)
+ setupVisualizations(paddingVisualizations, config.remoteHighlight.paddingStyling)
+
+ highlight.className = HIGHLIGHT_CLASS_NAME
+
+ const offset = _screenOffset(element)
+
+ let el = element,
+ offsetLeft = 0,
+ offsetTop = 0
+
+ // Probably the easiest way to get elements position without including transform
+ do {
+ offsetLeft += el.offsetLeft
+ offsetTop += el.offsetTop
+ el = el.offsetParent
+ } while (el)
+
+ const stylesToSet = {
+ left: offsetLeft + 'px',
+ top: offsetTop + 'px',
+ width: innerWidth + 'px',
+ height: innerHeight + 'px',
+ 'z-index': 2000000,
+ margin: 0,
+ padding: 0,
+ position: 'absolute',
+ 'pointer-events': 'none',
+ 'box-shadow': '0 0 1px #fff',
+ 'box-sizing': elementStyling.getPropertyValue('box-sizing'),
+ 'border-right': elementStyling.getPropertyValue('border-right'),
+ 'border-left': elementStyling.getPropertyValue('border-left'),
+ 'border-top': elementStyling.getPropertyValue('border-top'),
+ 'border-bottom': elementStyling.getPropertyValue('border-bottom'),
+ transform: elementStyling.getPropertyValue('transform'),
+ 'transform-origin': elementStyling.getPropertyValue('transform-origin'),
+ 'border-color': config.remoteHighlight.borderColor
+ }
+
+ const mergedStyles = Object.assign({}, stylesToSet)
+
+ const animateStartValues = config.remoteHighlight.animateStartValue
+
+ const animateEndValues = config.remoteHighlight.animateEndValue
+
+ const transitionValues = {
+ 'transition-property': 'opacity, background-color, transform',
+ 'transition-duration': '300ms, 2.3s'
+ }
+
+ function _setStyleValues(styleValues, obj) {
+ let prop
+
+ for (prop in styleValues) {
+ obj.setProperty(prop, styleValues[prop])
+ }
+ }
+
+ _setStyleValues(mergedStyles, highlight.style)
+ _setStyleValues(doAnimation ? animateStartValues : animateEndValues, highlight.style)
+
+ if (doAnimation) {
+ _setStyleValues(transitionValues, highlight.style)
+
+ window.setTimeout(function () {
+ _setStyleValues(animateEndValues, highlight.style)
+ }, 20)
+ }
+
+ window.document.body.appendChild(highlight)
+ }
+
+ add(element, doAnimation) {
+ if (this.elementExists(element) || element === window.document) {
+ return
+ }
+ if (this.trigger) {
+ _trigger(element, 'highlight', 1)
+ }
+
+ if ((!window.event || window.event instanceof MessageEvent) && !isInViewport(element)) {
+ let top = getDocumentOffsetTop(element)
+ if (top) {
+ top -= window.innerHeight / 2
+ window.scrollTo(0, top)
+ }
+ }
+ this.elements.push(element)
+
+ this.makeHighlightDiv(element, doAnimation)
+ }
+
+ clear() {
+ let i
+ const highlights = window.document.querySelectorAll('.' + HIGHLIGHT_CLASS_NAME),
+ body = window.document.body
+
+ for (i = 0; i < highlights.length; i++) {
+ body.removeChild(highlights[i])
+ }
+
+ if (this.trigger) {
+ for (i = 0; i < this.elements.length; i++) {
+ _trigger(this.elements[i], 'highlight', 0)
+ }
+ }
+
+ this.elements = []
+ }
+
+ redraw() {
+ let i, highlighted
+
+ // When redrawing a selector-based highlight, run a new selector
+ // query to ensure we have the latest set of elements to highlight.
+ if (this.selector) {
+ highlighted = window.document.querySelectorAll(this.selector)
+ } else {
+ highlighted = this.elements.slice(0)
+ }
+
+ this.clear()
+ for (i = 0; i < highlighted.length; i++) {
+ this.add(highlighted[i], false)
+ }
+ }
+}
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/client/injected.js b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/client/injected.js
new file mode 100644
index 00000000..209c06de
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/client/injected.js
@@ -0,0 +1 @@
+(()=>{"use strict";const e="__brackets-ld-highlight",t={"background-color":"rgba(0, 162, 255, 0.5)",opacity:0},o={"background-color":"rgb(106, 171, 233)",opacity:.6},n={"background-color":"rgb(156, 221, 156)"},r={"background-color":"rgb(255 ,177 ,95)"},i="rgba(21, 165, 255, 0.85)",s=!0;function a(e){return e.offsetTop+(e.offsetParent?a(e.offsetParent):0)}function l(){}let d,c;const p=function(e){d&&(window.cancelAnimationFrame(d),window.clearTimeout(c)),d=window.requestAnimationFrame(l),c=setTimeout((function(){window.cancelAnimationFrame(d),d=null}),1e3*e)};class f{constructor(e){this.elements=[],this.selector='[data-highlight="true"]',this.trigger=!!e}elementExists(e){let t;for(t in this.elements)if(this.elements[t]===e)return!0;return!1}makeHighlightDiv(a,l){const d=a.getBoundingClientRect(),c=window.document.createElement("div"),f=window.getComputedStyle(a),u=parseFloat(f.getPropertyValue("transition-duration")),g=parseFloat(f.getPropertyValue("animation-duration"));if(u&&p(u),g&&p(g),0===d.width&&0===d.height)return;const h={right:f.getPropertyValue("border-right-width"),left:f.getPropertyValue("border-left-width"),top:f.getPropertyValue("border-top-width"),bottom:f.getPropertyValue("border-bottom-width")},m="border-box"===f.boxSizing;let y=parseFloat(f.width),w=parseFloat(f.height),b=w,v=y;m||(y+=parseFloat(f.paddingLeft)+parseFloat(f.paddingRight),w+=parseFloat(f.paddingTop)+parseFloat(f.paddingBottom),v=y+parseFloat(h.right)+parseFloat(h.left),b=w+parseFloat(h.bottom)+parseFloat(h.top));const x={horizontal:"left, right",vertical:"top, bottom"},F=function(e){const t={};return x.horizontal.indexOf(e)>=0?(t.width=f.getPropertyValue("padding-"+e),t.height=w+"px",t.top=0,m&&(t.height=w-parseFloat(h.top)-parseFloat(h.bottom)+"px")):(t.height=f.getPropertyValue("padding-"+e),t.width=y+"px",t.left=0,m&&(t.width=y-parseFloat(h.left)-parseFloat(h.right)+"px")),t[e]=0,t.position="absolute",t},P=function(e){const t={},o=[];return o.right=parseFloat(f.getPropertyValue("margin-right")),o.top=parseFloat(f.getPropertyValue("margin-top")),o.bottom=parseFloat(f.getPropertyValue("margin-bottom")),o.left=parseFloat(f.getPropertyValue("margin-left")),x.horizontal.indexOf(e)>=0?(t.width=f.getPropertyValue("margin-"+e),t.height=b+o.top+o.bottom+"px",t.top="-"+(o.top+parseFloat(h.top))+"px"):(t.height=f.getPropertyValue("margin-"+e),t.width=v+"px",t.left="-"+h.left),t[e]="-"+(o[e]+parseFloat(h[e]))+"px",t.position="absolute",t},S=function(e){!s||parseInt(e.height,10)<=0||parseInt(e.width,10)<=0?e.display="none":e.display="block"},E=[F("top"),F("right"),F("bottom"),F("left")],k=function(e,t){let o;for(o=0;o=0&&t.left>=0&&t.bottom<=(window.innerHeight||o.clientHeight)&&t.right<=(window.innerWidth||o.clientWidth)}(e)){let t=a(e);t&&(t-=window.innerHeight/2,window.scrollTo(0,t))}this.elements.push(e),this.makeHighlightDiv(e,t)}}clear(){let t;const o=window.document.querySelectorAll("."+e),n=window.document.body;for(t=0;t{console.log("[Five Server] connecting...");const e=document.querySelector('[data-id="five-server"]'),t=("fsws",`${o=`${"http:"===window.location.protocol?"ws://":"wss://"}${new URL(e.src).host}`,o.replace(/\/+$/g,"")}/${(e=>e.replace(/^\/+/g,""))("fsws")}`);var o;const n=e.getAttribute("data-inject-body");n&&"true"===n.toString()&&(g=document.body?document.body.cloneNode(!0):void 0);let r=null;const i=new f(!0);i.redraw(),window.addEventListener("resize",(()=>{i.redraw()}));const s="[Five Server] connected.";let a,l=1e3,d=0,c="";const p=(e,t,o={})=>{const n=JSON.stringify({message:e,type:t,options:o});if(c===n&&"css updated"!==e)return;c=n;let i=document.getElementById("fiveserver-info-wrapper");i&&i.remove();const{time:s=3,animation:a=!0}=o;i=document.createElement("div"),i.id="fiveserver-info-wrapper",i.classList.add(`fiveserver-info-wrapper_${t}`),i.style.zIndex="100",i.style.display="flex",i.style.justifyContent="center",i.style.position="fixed",i.style.top="flex",i.style.left="50%",i.style.transform="translateX(-50%)",i.style.width="100%",i.style.maxWidth="80%";const l=document.createElement("div");l.id="fiveserver-info",l.style.fontSize="16px",l.style.fontFamily="Arial, Helvetica, sans-serif",l.style.color="white",l.style.backgroundColor="black",l.style.padding="4px 12px",l.style.borderRadius="4px",l.style.whiteSpace="pre-wrap",i.appendChild(l),document.body.appendChild(i),r&&(clearTimeout(r),r=null),r=setTimeout((()=>{i&&i.isConnected&&i.remove()}),1e3*s),"error"===t?(i.style.top="4px",i.style.animation="",l.style.color="black",l.style.backgroundColor="red"):a?(i.style.top="-40px",i.style.animation=`fiveserverInfoPopup ${s}s forwards`):(i.style.top="4px",i.style.animation=""),"success"===t?(l.style.color="#498d76",l.style.backgroundColor="#00ffa9"):"info"===t&&(l.style.color="#d2e1f0",l.style.backgroundColor="#2996ff"),l.innerHTML=e.replace(/{a&&1===(null==a?void 0:a.readyState)&&a.send(JSON.stringify({console:{type:e,message:t}}))},m=e=>{const t=document.getElementsByTagName("head")[0];let o=Array.from(document.getElementsByTagName("link"));o=o.filter((e=>/\.css/gm.test(e.href)||"stylesheet"==e.rel.toLowerCase()));for(let e=0;e=0?"&":"?"}_cacheOverride=${(new Date).valueOf()}`,r.onload=()=>{setTimeout((()=>n.remove()),0)},t.appendChild(r)}o.length>0&&e&&p("css updated","info")};let y,w="";const b=new DOMParser;let v=!1;const x=e=>{if("HIDE"===e||"HIDE_MESSAGE"===e||"HIDE_MESSAGES"===e){const e=document.getElementById("fiveserver-info-wrapper");e&&e.remove()}else p(e,"info",{animation:!1})},F=()=>{a=new WebSocket(t),a.onmessage=function(t){if(l=1e3,d=0,"reload"===t.data)window.location.reload();else if("refreshcss"===t.data)m(!0);else if("refreshcss-silent"===t.data)m(!1);else if("connected"===t.data){console.log(s);const e=document.querySelector('[data-id="five-server"]');e&&e.dispatchEvent(new Event("connected"))}else if("initRemoteLogs"===t.data)(()=>{const e=console.log;console.log=function(...t){t[0]===s?p("connected","success"):h("log",...t),e.apply(console,t)};const t=console.warn;console.warn=function(...e){h("warn",...e),t.apply(console,e)};const o=console.error;console.error=function(...e){h("error",...e),o.apply(console,e)}})();else{const n=JSON.parse(t.data);n.navigate&&window.location.replace(n.navigate),n.body&&n.hot?(t=>{u(void 0,void 0,void 0,(function*(){if(""===w&&(yield(w="loading",new Promise((t=>{const o=`//${new URL(e.src).host}/fiveserver/scripts/diffDOM.js`,n=document.createElement("script");n.type="text/javascript",n.src=o,n.onload=()=>{setTimeout((()=>{y=new diffDOM.DiffDOM,w="ready",t()}))},document.getElementsByTagName("head")[0].appendChild(n)})))),"ready"===w)try{const e=g,o=b.parseFromString(t,"text/html").querySelector("body"),n=document.createElement("body");if(n.innerHTML=t,o&&o.attributes.length>0)for(let e=0;ee.offsetTop+(e.offsetParent?t(e.offsetParent):0),o=t(e)-window.innerHeight/2;window.scrollTo(0,o)}}}catch(e){v=!0,x("Having issues parsing the DOM.\nPlease verify that your HTML is valid...")}}))})(n.body):n.body&&(o=n.body,document.body.innerHTML=o),n.messages&&(e=>{x(e.join("\n\n"))})(n.messages),n.message&&x(n.message),n.body&&i.redraw()}var o},a.onopen=function(){if(d>0)return void window.location.reload();const e=document.querySelectorAll("script");for(let t=0;t1&&console.log("connecting..."),d<=25&&F(),l=Math.floor(1.1*l)}),l)},a.onerror=function(e){a.close()}};let P=0;const S=()=>{if(P>10)return console.error("[Five Server] status check failed"),console.log("[Five Server] browser reloads in 5 seconds"),void setTimeout((()=>{window.location.reload()}),5e3);console.log("[Five Server] status check..."),setTimeout((()=>{E()}),1e3)},E=()=>u(void 0,void 0,void 0,(function*(){P++;const t=`${new URL(e.src).protocol}//${new URL(e.src).host}/fiveserver/status`;try{const e=yield fetch(t),o=yield e.json();o&&o.status&&"online"===o.status?(F(),P=0):S()}catch(e){S()}}));E()}))})();
\ No newline at end of file
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/client/injected.ts b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/client/injected.ts
new file mode 100644
index 00000000..306642a6
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/client/injected.ts
@@ -0,0 +1,432 @@
+declare const diffDOM: any
+
+import { Highlight } from './highlight'
+import { appendPathToUrl } from '../src/helpers'
+
+// clone the current state of the body before any javascript
+// manipulates it inside window.addEventListener('load', (...))
+let _internalDOMBody
+
+const block = (document.body) ? document.body.hasAttribute('data-server-no-reload') : false;
+
+if (block) {
+ console.info('[Five Server] Reload disabled due to \'data-server-no-reload\' attribute on BODY element')
+}
+if ('WebSocket' in window && !block) {
+ window.addEventListener('load', () => {
+ console.log('[Five Server] connecting...')
+
+ const script = document.querySelector('[data-id="five-server"]') as HTMLScriptElement
+
+ const protocol = window.location.protocol === 'http:' ? 'ws://' : 'wss://'
+ const address = appendPathToUrl(`${protocol}${new URL(script.src).host}`, 'fsws')
+
+ // check if we need to clone the body for the "injectBody" feature or not
+ const optionsInjectBody = script.getAttribute('data-inject-body')
+ if (optionsInjectBody && optionsInjectBody.toString() === 'true')
+ _internalDOMBody = document.body ? document.body.cloneNode(true) : undefined
+
+ let timer: any = null
+
+ const highlight = new Highlight(true)
+ highlight.redraw()
+ window.addEventListener('resize', () => {
+ highlight.redraw()
+ })
+
+ const CONNECTED_MSG = '[Five Server] connected.'
+ const MAX_ATTEMPTS = 25
+ let wait = 1000
+ let attempts = 0
+ let socket!: WebSocket
+
+ let lastPopUp = ''
+ const popup = (
+ message: string,
+ type: 'info' | 'success' | 'error' | 'warn',
+ options: { time?: number; animation?: boolean } = {}
+ ) => {
+ const str = JSON.stringify({ message, type, options })
+
+ // block identical popups, except "css update"
+ if (lastPopUp === str && message !== 'css updated') return
+ lastPopUp = str
+
+ let wrapper = document.getElementById('fiveserver-info-wrapper')
+ if (wrapper) wrapper.remove()
+
+ const { time = 3, animation = true } = options
+
+ wrapper = document.createElement('div')
+ wrapper.id = 'fiveserver-info-wrapper'
+ wrapper.classList.add(`fiveserver-info-wrapper_${type}`)
+
+ wrapper.style.zIndex = '100'
+ wrapper.style.display = 'flex'
+ wrapper.style.justifyContent = 'center'
+ wrapper.style.position = 'fixed'
+ wrapper.style.top = 'flex'
+
+ wrapper.style.left = '50%'
+ wrapper.style.transform = 'translateX(-50%)'
+ wrapper.style.width = '100%'
+ wrapper.style.maxWidth = '80%'
+
+ const el = document.createElement('div')
+ el.id = 'fiveserver-info'
+ el.style.fontSize = '16px'
+ el.style.fontFamily = 'Arial, Helvetica, sans-serif'
+ el.style.color = 'white'
+ el.style.backgroundColor = 'black'
+
+ el.style.padding = '4px 12px'
+ el.style.borderRadius = '4px'
+ el.style.whiteSpace = 'pre-wrap'
+
+ wrapper.appendChild(el)
+
+ document.body.appendChild(wrapper)
+
+ // remove popup from DOM after 'time'
+ if (timer) {
+ clearTimeout(timer)
+ timer = null
+ }
+ timer = setTimeout(() => {
+ if (wrapper && wrapper.isConnected) wrapper.remove()
+ }, time * 1000)
+
+ if (type === 'error') {
+ wrapper.style.top = '4px'
+ wrapper.style.animation = ''
+
+ el.style.color = 'black'
+ el.style.backgroundColor = 'red'
+ } else {
+ if (animation) {
+ wrapper.style.top = '-40px'
+ wrapper.style.animation = `fiveserverInfoPopup ${time}s forwards`
+ } else {
+ wrapper.style.top = '4px'
+ wrapper.style.animation = ''
+ }
+ }
+
+ if (type === 'success') {
+ el.style.color = '#498d76'
+ el.style.backgroundColor = '#00ffa9'
+ } else if (type === 'info') {
+ el.style.color = '#d2e1f0'
+ el.style.backgroundColor = '#2996ff'
+ }
+ el.innerHTML = message.replace(/ {
+ if (socket && socket?.readyState === 1) {
+ socket.send(JSON.stringify({ console: { type, message } }))
+ }
+ }
+
+ const overwriteLogs = () => {
+ // log
+ const oldLog = console.log
+ console.log = function (...message) {
+ if (message[0] === CONNECTED_MSG) {
+ popup('connected', 'success')
+ } else {
+ send('log', ...message)
+ }
+ oldLog.apply(console, message)
+ }
+
+ // warn
+ const oldWarn = console.warn
+ console.warn = function (...message) {
+ send('warn', ...message)
+ oldWarn.apply(console, message)
+ }
+
+ // error
+ const oldError = console.error
+ console.error = function (...message) {
+ send('error', ...message)
+ oldError.apply(console, message)
+ }
+ }
+
+ const refreshCSS = (showPopup: boolean) => {
+ const head = document.getElementsByTagName('head')[0]
+
+ let sheets = Array.from(document.getElementsByTagName('link'))
+ sheets = sheets.filter(sheet => /\.css/gm.test(sheet.href) || sheet.rel.toLowerCase() == 'stylesheet')
+
+ for (let i = 0; i < sheets.length; ++i) {
+ const el = sheets[i]
+
+ const newEl = el.cloneNode(true) as HTMLLinkElement
+
+ // changing the href of the css file will make the browser refetch it
+ const url = newEl.href.replace(/(&|\?)_cacheOverride=\d+/, '')
+ newEl.href = `${url}${url.indexOf('?') >= 0 ? '&' : '?'}_cacheOverride=${new Date().valueOf()}`
+
+ newEl.onload = () => {
+ setTimeout(() => el.remove(), 0)
+ }
+
+ head.appendChild(newEl)
+ }
+
+ if (sheets.length > 0 && showPopup) popup('css updated', 'info')
+ }
+
+ const injectBody = body => {
+ document.body.innerHTML = body
+ }
+
+ let _diffDOMStatus = ''
+ let _dd
+
+ const addDiffDOM = (): Promise => {
+ _diffDOMStatus = 'loading'
+ return new Promise(resolve => {
+ const url = `//${new URL(script.src).host}/fiveserver/scripts/diffDOM.js`
+ const s = document.createElement('script')
+ s.type = 'text/javascript'
+ s.src = url
+ s.onload = () => {
+ setTimeout(() => {
+ _dd = new diffDOM.DiffDOM()
+ _diffDOMStatus = 'ready'
+ resolve()
+ })
+ }
+ document.getElementsByTagName('head')[0].appendChild(s)
+ })
+ }
+
+ const domParser = new DOMParser()
+ let diffError = false
+ const updateBody = async (d: any) => {
+ if (_diffDOMStatus === '') await addDiffDOM()
+
+ if (_diffDOMStatus === 'ready') {
+ try {
+ const body = _internalDOMBody
+
+ const newBody = domParser.parseFromString(d, 'text/html').querySelector('body')
+
+ const tmp = document.createElement('body')
+ tmp.innerHTML = d
+
+ // copy all attributes
+ if (newBody) {
+ if (newBody.attributes.length > 0)
+ for (let i = 0; i < newBody.attributes.length; i++) {
+ const attr = newBody.attributes.item(i)
+ if (attr) {
+ const newAttr = document.createAttribute(attr.name)
+ newAttr.value = attr.value
+ tmp.attributes.setNamedItem(newAttr)
+ }
+ }
+ }
+
+ const diff = _dd.diff(body, tmp)
+
+ const testBody = document.body.cloneNode(true)
+
+ const testSuccess = _dd.apply(testBody, diff)
+ if (testSuccess) {
+ const success = _dd.apply(document.body, diff)
+
+ if (success) {
+ _internalDOMBody = tmp
+
+ if (diffError) {
+ diffError = false
+ appendMessage('HIDE')
+ }
+
+ // scroll element into view (center of page)
+ const el = document.querySelector(`[data-highlight="true"]`)
+ if (el) {
+ const documentOffsetTop = el => {
+ return el.offsetTop + (el.offsetParent ? documentOffsetTop(el.offsetParent) : 0)
+ }
+ const pos = documentOffsetTop(el) - window.innerHeight / 2
+ window.scrollTo(0, pos)
+ }
+ }
+ }
+ } catch (error) {
+ diffError = true
+ appendMessage('Having issues parsing the DOM.\nPlease verify that your HTML is valid...')
+ }
+ }
+ }
+
+ const appendMessages = (msg: string[]) => {
+ appendMessage(msg.join('\n\n'))
+ }
+
+ const appendMessage = (msg: string) => {
+ if (msg === 'HIDE' || msg === 'HIDE_MESSAGE' || msg === 'HIDE_MESSAGES') {
+ const wrapper = document.getElementById('fiveserver-info-wrapper')
+ if (wrapper) wrapper.remove()
+ } else {
+ popup(msg, 'info', { animation: false })
+ }
+ }
+
+ const connect = () => {
+ socket = new WebSocket(address)
+
+ socket.onmessage = function (msg) {
+ wait = 1000
+ attempts = 0
+
+ if (msg.data === 'reload') window.location.reload()
+ else if (msg.data === 'refreshcss') refreshCSS(true)
+ else if (msg.data === 'refreshcss-silent') refreshCSS(false)
+ else if (msg.data === 'connected') {
+ console.log(CONNECTED_MSG)
+ // dispatch "connected" event when client is connected
+ const script = document.querySelector('[data-id="five-server"]')
+ if (script) script.dispatchEvent(new Event('connected'))
+ } else if (msg.data === 'initRemoteLogs') overwriteLogs()
+ else {
+ const d = JSON.parse(msg.data)
+ if (d.navigate) window.location.replace(d.navigate)
+ // hot body injection
+ if (d.body && d.hot) updateBody(d.body)
+ // simple body replacement
+ else if (d.body) injectBody(d.body)
+
+ // message and messages 🤣
+ if (d.messages) appendMessages(d.messages)
+ if (d.message) appendMessage(d.message)
+
+ // redraw the highlight on body update
+ if (d.body) highlight.redraw()
+ }
+ }
+ socket.onopen = function () {
+ // reload page on successful reconnection
+ if (attempts > 0) {
+ window.location.reload()
+ return
+ }
+
+ const scripts = document.querySelectorAll('script')
+ for (let i = 0; i < scripts.length; i++) {
+ const script = scripts[i]
+ if (script.dataset && script.dataset.file) {
+ socket.send(JSON.stringify({ file: script.dataset.file }))
+ }
+ }
+
+ // add styles to body
+ const style = document.createElement('style')
+ style.innerHTML = `
+ /* Injected by five-server */
+ /*[data-highlight="true"] {
+ border: 1px rgb(90,170,255) solid !important;
+ background-color: rgba(155,215,255,0.5);
+ animation: fadeOutHighlight 1s forwards 0.5s;
+ }
+ img[data-highlight="true"] {
+ filter: sepia(100%) hue-rotate(180deg) saturate(200%);
+ animation: fadeOutHighlightIMG 0.5s forwards 0.5s;
+ }*/
+ @keyframes fadeOutHighlight {
+ from {background-color: rgba(155,215,255,0.5);}
+ to {background-color: rgba(155,215,255,0);}
+ }
+ @keyframes fadeOutHighlightIMG {
+ 0% {filter: sepia(100%) hue-rotate(180deg) saturate(200%);}
+ 33% {filter: sepia(66%) hue-rotate(180deg) saturate(100%);}
+ 50% {filter: sepia(50%) hue-rotate(90deg) saturate(50%);}
+ 66% {filter: sepia(33%) hue-rotate(0deg) saturate(100%);}
+ 100% {filter: sepia(0%) hue-rotate(0deg) saturate(100%);}
+ }
+ @keyframes fiveserverInfoPopup {
+ 0% {top:-40px;}
+ 15% {top:4px;}
+ 85% {top:4px;}
+ 100% {top:-40px;}
+ }
+ /*smaller*/
+ @media (max-width: 640px) {
+ #fiveserver-info-wrapper {
+ max-width: 98%;
+ }
+ #fiveserver-info {
+ border-radius: 0px;
+ }
+ }
+
+ `
+ document.head.appendChild(style)
+ }
+ socket.onclose = function (e) {
+ setTimeout(function () {
+ popup('lost connection to dev server', 'error')
+ }, 300)
+ if (attempts === 0) console.log('Socket is closed. Reconnect will be attempted in 1 second.', e.reason)
+
+ setTimeout(function () {
+ attempts++
+ if (attempts > 1) console.log('connecting...')
+ if (attempts <= MAX_ATTEMPTS) connect()
+ wait = Math.floor(wait * 1.1)
+ }, wait)
+ }
+ socket.onerror = function (event) {
+ // console.error('Socket encountered error: ', event, 'Closing socket')
+ socket.close()
+ }
+ }
+
+ const MAX_STATUS_CHECK = 10
+ let statusChecks = 0
+ const reCheckStatus = () => {
+ if (statusChecks > MAX_STATUS_CHECK) {
+ console.error('[Five Server] status check failed')
+ console.log('[Five Server] browser reloads in 5 seconds')
+ setTimeout(() => {
+ window.location.reload()
+ }, 5000)
+ return
+ }
+ console.log('[Five Server] status check...')
+ setTimeout(() => {
+ checkStatus()
+ }, 1000)
+ }
+
+ const checkStatus = async () => {
+ statusChecks++
+ const p = new URL(script.src).protocol
+ const h = new URL(script.src).host
+
+ const url = `${p}//${h}/fiveserver/status`
+
+ try {
+ const res = await fetch(url)
+ const json = await res.json()
+
+ if (json && json.status && json.status === 'online') {
+ connect()
+ statusChecks = 0
+ } else {
+ reCheckStatus()
+ }
+ } catch (error) {
+ reCheckStatus()
+ }
+ }
+
+ checkStatus()
+ })
+}
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/favicon.ico b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/favicon.ico
new file mode 100644
index 00000000..ebd16bf4
Binary files /dev/null and b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/favicon.ico differ
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/scripts/diffDOM.js b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/scripts/diffDOM.js
new file mode 100644
index 00000000..b5764c23
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/scripts/diffDOM.js
@@ -0,0 +1,2 @@
+var diffDOM=function(e){"use strict";function t(e,o,n){var s;return"#text"===e.nodeName?s=n.document.createTextNode(e.data):"#comment"===e.nodeName?s=n.document.createComment(e.data):(o?s=n.document.createElementNS("http://www.w3.org/2000/svg",e.nodeName):"svg"===e.nodeName.toLowerCase()?(s=n.document.createElementNS("http://www.w3.org/2000/svg","svg"),o=!0):s=n.document.createElement(e.nodeName),e.attributes&&Object.entries(e.attributes).forEach((function(e){var t=e[0],o=e[1];return s.setAttribute(t,o)})),e.childNodes&&e.childNodes.forEach((function(e){return s.appendChild(t(e,o,n))})),n.valueDiffing&&(e.value&&(s.value=e.value),e.checked&&(s.checked=e.checked),e.selected&&(s.selected=e.selected))),s}function o(e,t){for(t=t.slice();t.length>0;){if(!e.childNodes)return!1;var o=t.splice(0,1)[0];e=e.childNodes[o]}return e}function n(e,n,s){var i,a,l,c,r=o(e,n[s._const.route]),u={diff:n,node:r};if(s.preDiffApply(u))return!0;switch(n[s._const.action]){case s._const.addAttribute:if(!r||!r.setAttribute)return!1;r.setAttribute(n[s._const.name],n[s._const.value]);break;case s._const.modifyAttribute:if(!r||!r.setAttribute)return!1;r.setAttribute(n[s._const.name],n[s._const.newValue]),"INPUT"===r.nodeName&&"value"===n[s._const.name]&&(r.value=n[s._const.newValue]);break;case s._const.removeAttribute:if(!r||!r.removeAttribute)return!1;r.removeAttribute(n[s._const.name]);break;case s._const.modifyTextElement:if(!r||3!==r.nodeType)return!1;s.textDiff(r,r.data,n[s._const.oldValue],n[s._const.newValue]);break;case s._const.modifyValue:if(!r||void 0===r.value)return!1;r.value=n[s._const.newValue];break;case s._const.modifyComment:if(!r||void 0===r.data)return!1;s.textDiff(r,r.data,n[s._const.oldValue],n[s._const.newValue]);break;case s._const.modifyChecked:if(!r||void 0===r.checked)return!1;r.checked=n[s._const.newValue];break;case s._const.modifySelected:if(!r||void 0===r.selected)return!1;r.selected=n[s._const.newValue];break;case s._const.replaceElement:r.parentNode.replaceChild(t(n[s._const.newValue],"http://www.w3.org/2000/svg"===r.namespaceURI,s),r);break;case s._const.relocateGroup:Array.apply(void 0,new Array(n.groupLength)).map((function(){return r.removeChild(r.childNodes[n[s._const.from]])})).forEach((function(e,t){0===t&&(a=r.childNodes[n[s._const.to]]),r.insertBefore(e,a||null)}));break;case s._const.removeElement:r.parentNode.removeChild(r);break;case s._const.addElement:c=(l=n[s._const.route].slice()).splice(l.length-1,1)[0],(r=o(e,l)).insertBefore(t(n[s._const.element],"http://www.w3.org/2000/svg"===r.namespaceURI,s),r.childNodes[c]||null);break;case s._const.removeTextElement:if(!r||3!==r.nodeType)return!1;r.parentNode.removeChild(r);break;case s._const.addTextElement:if(c=(l=n[s._const.route].slice()).splice(l.length-1,1)[0],i=s.document.createTextNode(n[s._const.value]),!(r=o(e,l))||!r.childNodes)return!1;r.insertBefore(i,r.childNodes[c]||null);break;default:console.log("unknown action")}return u.newNode=i,s.postDiffApply(u),!0}function s(e,t,o){var n=e[t];e[t]=e[o],e[o]=n}function i(e,t,o){t.length||(t=[t]),(t=t.slice()).reverse(),t.forEach((function(t){!function(e,t,o){switch(t[o._const.action]){case o._const.addAttribute:t[o._const.action]=o._const.removeAttribute,n(e,t,o);break;case o._const.modifyAttribute:s(t,o._const.oldValue,o._const.newValue),n(e,t,o);break;case o._const.removeAttribute:t[o._const.action]=o._const.addAttribute,n(e,t,o);break;case o._const.modifyTextElement:case o._const.modifyValue:case o._const.modifyComment:case o._const.modifyChecked:case o._const.modifySelected:case o._const.replaceElement:s(t,o._const.oldValue,o._const.newValue),n(e,t,o);break;case o._const.relocateGroup:s(t,o._const.from,o._const.to),n(e,t,o);break;case o._const.removeElement:t[o._const.action]=o._const.addElement,n(e,t,o);break;case o._const.addElement:t[o._const.action]=o._const.removeElement,n(e,t,o);break;case o._const.removeTextElement:t[o._const.action]=o._const.addTextElement,n(e,t,o);break;case o._const.addTextElement:t[o._const.action]=o._const.removeTextElement,n(e,t,o);break;default:console.log("unknown action")}}(e,t,o)}))}var a=function(e){var t=this;void 0===e&&(e={}),Object.entries(e).forEach((function(e){var o=e[0],n=e[1];return t[o]=n}))};function l(e){var t=[];return t.push(e.nodeName),"#text"!==e.nodeName&&"#comment"!==e.nodeName&&e.attributes&&(e.attributes.class&&t.push(e.nodeName+"."+e.attributes.class.replace(/ /g,".")),e.attributes.id&&t.push(e.nodeName+"#"+e.attributes.id)),t}function c(e){var t={},o={};return e.forEach((function(e){l(e).forEach((function(e){var n=e in t;n||e in o?n&&(delete t[e],o[e]=!0):t[e]=!0}))})),t}function r(e,t){var o=c(e),n=c(t),s={};return Object.keys(o).forEach((function(e){n[e]&&(s[e]=!0)})),s}function u(e){return delete e.outerDone,delete e.innerDone,delete e.valueDone,!e.childNodes||e.childNodes.every(u)}function d(e,t){if(!["nodeName","value","checked","selected","data"].every((function(o){return e[o]===t[o]})))return!1;if(Boolean(e.attributes)!==Boolean(t.attributes))return!1;if(Boolean(e.childNodes)!==Boolean(t.childNodes))return!1;if(e.attributes){var o=Object.keys(e.attributes),n=Object.keys(t.attributes);if(o.length!==n.length)return!1;if(!o.every((function(o){return e.attributes[o]===t.attributes[o]})))return!1}if(e.childNodes){if(e.childNodes.length!==t.childNodes.length)return!1;if(!e.childNodes.every((function(e,o){return d(e,t.childNodes[o])})))return!1}return!0}function h(e,t,o,n,s){if(!e||!t)return!1;if(e.nodeName!==t.nodeName)return!1;if("#text"===e.nodeName)return!!s||e.data===t.data;if(e.nodeName in o)return!0;if(e.attributes&&t.attributes){if(e.attributes.id){if(e.attributes.id!==t.attributes.id)return!1;if(e.nodeName+"#"+e.attributes.id in o)return!0}if(e.attributes.class&&e.attributes.class===t.attributes.class)if(e.nodeName+"."+e.attributes.class.replace(/ /g,".")in o)return!0}if(n)return!0;var i=e.childNodes?e.childNodes.slice().reverse():[],a=t.childNodes?t.childNodes.slice().reverse():[];if(i.length!==a.length)return!1;if(s)return i.every((function(e,t){return e.nodeName===a[t].nodeName}));var l=r(i,a);return i.every((function(e,t){return h(e,a[t],l,!0,!0)}))}function f(e){return JSON.parse(JSON.stringify(e))}function p(e,t,o,n){var s=0,i=[],a=e.length,c=t.length,u=Array.apply(void 0,new Array(a+1)).map((function(){return[]})),d=r(e,t),f=a===c;f&&e.some((function(e,o){var n=l(e),s=l(t[o]);return n.length!==s.length?(f=!1,!0):(n.some((function(e,t){if(e!==s[t])return f=!1,!0})),!f||void 0)}));for(var p=0;p=s&&(s=u[p+1][_+1],i=[p+1,_+1]))}return 0!==s&&{oldValue:i[0]-s,newValue:i[1]-s,length:s}}function m(e,t){return Array.apply(void 0,new Array(e)).map((function(){return t}))}a.prototype.toString=function(){return JSON.stringify(this)},a.prototype.setValue=function(e,t){return this[e]=t,this};var _=function(){this.list=[]};function V(e,t){var o,n,s=e;for(t=t.slice();t.length>0;){if(!s.childNodes)return!1;n=t.splice(0,1)[0],o=s,s=s.childNodes[n]}return{node:s,parentNode:o,nodeIndex:n}}function g(e,t,o){return t.forEach((function(t){!function(e,t,o){var n,s,i,a=V(e,t[o._const.route]),l=a.node,c=a.parentNode,r=a.nodeIndex,u=[],d={diff:t,node:l};if(o.preVirtualDiffApply(d))return!0;switch(t[o._const.action]){case o._const.addAttribute:l.attributes||(l.attributes={}),l.attributes[t[o._const.name]]=t[o._const.value],"checked"===t[o._const.name]?l.checked=!0:"selected"===t[o._const.name]?l.selected=!0:"INPUT"===l.nodeName&&"value"===t[o._const.name]&&(l.value=t[o._const.value]);break;case o._const.modifyAttribute:l.attributes[t[o._const.name]]=t[o._const.newValue];break;case o._const.removeAttribute:delete l.attributes[t[o._const.name]],0===Object.keys(l.attributes).length&&delete l.attributes,"checked"===t[o._const.name]?l.checked=!1:"selected"===t[o._const.name]?delete l.selected:"INPUT"===l.nodeName&&"value"===t[o._const.name]&&delete l.value;break;case o._const.modifyTextElement:l.data=t[o._const.newValue];break;case o._const.modifyValue:l.value=t[o._const.newValue];break;case o._const.modifyComment:l.data=t[o._const.newValue];break;case o._const.modifyChecked:l.checked=t[o._const.newValue];break;case o._const.modifySelected:l.selected=t[o._const.newValue];break;case o._const.replaceElement:(n=f(t[o._const.newValue])).outerDone=!0,n.innerDone=!0,n.valueDone=!0,c.childNodes[r]=n;break;case o._const.relocateGroup:l.childNodes.splice(t[o._const.from],t.groupLength).reverse().forEach((function(e){return l.childNodes.splice(t[o._const.to],0,e)})),l.subsets&&l.subsets.forEach((function(e){if(t[o._const.from]t[o._const.from]){e.oldValue-=t.groupLength;var n=e.oldValue+e.length-t[o._const.to];n>0&&(u.push({oldValue:t[o._const.to]+t.groupLength,newValue:e.newValue+e.length-n,length:n}),e.length-=n)}else if(t[o._const.from]>t[o._const.to]&&e.oldValue>t[o._const.to]&&e.oldValue0&&(u.push({oldValue:t[o._const.to]+t.groupLength,newValue:e.newValue+e.length-s,length:s}),e.length-=s)}else e.oldValue===t[o._const.from]&&(e.oldValue=t[o._const.to])}));break;case o._const.removeElement:c.childNodes.splice(r,1),c.subsets&&c.subsets.forEach((function(e){e.oldValue>r?e.oldValue-=1:e.oldValue===r?e.delete=!0:e.oldValuer&&(e.oldValue+e.length-1===r?e.length--:(u.push({newValue:e.newValue+r-e.oldValue,oldValue:r,length:e.length-r+e.oldValue-1}),e.length=r-e.oldValue))})),l=c;break;case o._const.addElement:s=t[o._const.route].slice(),i=s.splice(s.length-1,1)[0],l=V(e,s).node,(n=f(t[o._const.element])).outerDone=!0,n.innerDone=!0,n.valueDone=!0,l.childNodes||(l.childNodes=[]),i>=l.childNodes.length?l.childNodes.push(n):l.childNodes.splice(i,0,n),l.subsets&&l.subsets.forEach((function(e){if(e.oldValue>=i)e.oldValue+=1;else if(e.oldValuei){var t=e.oldValue+e.length-i;u.push({newValue:e.newValue+e.length-t,oldValue:i+1,length:t}),e.length-=t}}));break;case o._const.removeTextElement:c.childNodes.splice(r,1),"TEXTAREA"===c.nodeName&&delete c.value,c.subsets&&c.subsets.forEach((function(e){e.oldValue>r?e.oldValue-=1:e.oldValue===r?e.delete=!0:e.oldValuer&&(e.oldValue+e.length-1===r?e.length--:(u.push({newValue:e.newValue+r-e.oldValue,oldValue:r,length:e.length-r+e.oldValue-1}),e.length=r-e.oldValue))})),l=c;break;case o._const.addTextElement:s=t[o._const.route].slice(),i=s.splice(s.length-1,1)[0],(n={}).nodeName="#text",n.data=t[o._const.value],(l=V(e,s).node).childNodes||(l.childNodes=[]),i>=l.childNodes.length?l.childNodes.push(n):l.childNodes.splice(i,0,n),"TEXTAREA"===l.nodeName&&(l.value=t[o._const.newValue]),l.subsets&&l.subsets.forEach((function(e){if(e.oldValue>=i&&(e.oldValue+=1),e.oldValuei){var t=e.oldValue+e.length-i;u.push({newValue:e.newValue+e.length-t,oldValue:i+1,length:t}),e.length-=t}}));break;default:console.log("unknown action")}l.subsets&&(l.subsets=l.subsets.filter((function(e){return!e.delete&&e.oldValue!==e.newValue})),u.length&&(l.subsets=l.subsets.concat(u))),d.newNode=n,o.postVirtualDiffApply(d)}(e,t,o)})),!0}function v(e,t){void 0===t&&(t={});var o={};if(o.nodeName=e.nodeName,"#text"===o.nodeName||"#comment"===o.nodeName)o.data=e.data;else{if(e.attributes&&e.attributes.length>0)o.attributes={},Array.prototype.slice.call(e.attributes).forEach((function(e){return o.attributes[e.name]=e.value}));if("TEXTAREA"===o.nodeName)o.value=e.value;else if(e.childNodes&&e.childNodes.length>0){o.childNodes=[],Array.prototype.slice.call(e.childNodes).forEach((function(e){return o.childNodes.push(v(e,t))}))}t.valueDiffing&&(void 0!==e.checked&&e.type&&["radio","checkbox"].includes(e.type.toLowerCase())?o.checked=e.checked:void 0!==e.value&&(o.value=e.value),void 0!==e.selected&&(o.selected=e.selected))}return o}_.prototype.add=function(e){var t;(t=this.list).push.apply(t,e)},_.prototype.forEach=function(e){this.list.forEach((function(t){return e(t)}))};var N=/<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>/g,b=Object.create?Object.create(null):{},w=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function y(e){return e.replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}var E={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,menuItem:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0};function k(e){var t={nodeName:"",attributes:{}},o=e.match(/<\/?([^\s]+?)[/\s>]/);if(o&&(t.nodeName=o[1].toUpperCase(),(E[o[1].toLowerCase()]||"/"===e.charAt(e.length-2))&&(t.voidElement=!0),t.nodeName.startsWith("!--"))){var n=e.indexOf("--\x3e");return{type:"comment",data:-1!==n?e.slice(4,n):""}}for(var s=new RegExp(w),i=null,a=!1;!a;)if(null===(i=s.exec(e)))a=!0;else if(i[0].trim())if(i[1]){var l=i[1].trim(),c=[l,""];l.indexOf("=")>-1&&(c=l.split("=")),t.attributes[c[0]]=c[1],s.lastIndex--}else i[2]&&(t.attributes[i[2]]=i[3].trim().substring(1,i[3].length-1));return t}function x(e){return function e(t){return delete t.voidElement,t.childNodes&&t.childNodes.forEach((function(t){return e(t)})),t}(function(e,t){void 0===t&&(t={components:b});var o,n=[],s=-1,i=[],a=!1;return e.replace(N,(function(l,c){if(a){if(l!==""+o.nodeName+">")return;a=!1}var r,u="/"!==l.charAt(1),d=l.startsWith("\x3c!--"),h=c+l.length,f=e.charAt(h);if(d){var p=k(l);return s<0?(n.push(p),n):((r=i[s])&&(r.childNodes||(r.childNodes=[]),r.childNodes.push(p)),n)}if(u&&(o=k(l),s++,"tag"===o.type&&t.components[o.nodeName]&&(o.type="component",a=!0),o.voidElement||a||!f||"<"===f||(o.childNodes||(o.childNodes=[]),o.childNodes.push({nodeName:"#text",data:y(e.slice(h,e.indexOf("<",h)))})),0===s&&n.push(o),(r=i[s-1])&&(r.childNodes||(r.childNodes=[]),r.childNodes.push(o)),i[s]=o),(!u||o.voidElement)&&(s--,!a&&"<"!==f&&f)){r=-1===s?n:i[s].childNodes||[];var m=e.indexOf("<",h),_=y(e.slice(h,-1===m?void 0:m));r.push({nodeName:"#text",data:_})}})),n[0]}(e))}var A=function(e,t,o){this.options=o,this.t1=e instanceof HTMLElement?v(e,this.options):"string"==typeof e?x(e,this.options):JSON.parse(JSON.stringify(e)),this.t2=t instanceof HTMLElement?v(t,this.options):"string"==typeof t?x(t,this.options):JSON.parse(JSON.stringify(t)),this.diffcount=0,this.foundAll=!1,this.debug&&(this.t1Orig=v(e,this.options),this.t2Orig=v(t,this.options)),this.tracker=new _};A.prototype.init=function(){return this.findDiffs(this.t1,this.t2)},A.prototype.findDiffs=function(e,t){var o;do{if(this.options.debug&&(this.diffcount+=1,this.diffcount>this.options.diffcap))throw window.diffError=[this.t1Orig,this.t2Orig],new Error("surpassed diffcap:"+JSON.stringify(this.t1Orig)+" -> "+JSON.stringify(this.t2Orig));0===(o=this.findNextDiff(e,t,[])).length&&(d(e,t)||(this.foundAll?console.error("Could not find remaining diffs!"):(this.foundAll=!0,u(e),o=this.findNextDiff(e,t,[])))),o.length>0&&(this.foundAll=!1,this.tracker.add(o),g(e,o,this.options))}while(o.length>0);return this.tracker.list},A.prototype.findNextDiff=function(e,t,o){var n,s;if(this.options.maxDepth&&o.length>this.options.maxDepth)return[];if(!e.outerDone){if(n=this.findOuterDiff(e,t,o),this.options.filterOuterDiff&&(s=this.options.filterOuterDiff(e,t,n))&&(n=s),n.length>0)return e.outerDone=!0,n;e.outerDone=!0}if(!e.innerDone){if((n=this.findInnerDiff(e,t,o)).length>0)return n;e.innerDone=!0}if(this.options.valueDiffing&&!e.valueDone){if((n=this.findValueDiff(e,t,o)).length>0)return e.valueDone=!0,n;e.valueDone=!0}return[]},A.prototype.findOuterDiff=function(e,t,o){var n,s,i,l,c,r,u=[];if(e.nodeName!==t.nodeName){if(!o.length)throw new Error("Top level nodes have to be of the same kind.");return[(new a).setValue(this.options._const.action,this.options._const.replaceElement).setValue(this.options._const.oldValue,f(e)).setValue(this.options._const.newValue,f(t)).setValue(this.options._const.route,o)]}if(o.length&&this.options.maxNodeDiffCount0&&(c=this.attemptGroupRelocation(e,t,u,o)).length>0)return c}for(var h=0;hs.length?("#text"===_.nodeName?c.push((new a).setValue(this.options._const.action,this.options._const.removeTextElement).setValue(this.options._const.route,o.concat(r)).setValue(this.options._const.value,_.data)):c.push((new a).setValue(this.options._const.action,this.options._const.removeElement).setValue(this.options._const.element,f(_)).setValue(this.options._const.route,o.concat(r))),n.splice(h,1),h-=1,r-=1,l-=1):n.lengthu+1&&"#text"===e.childNodes[u+1].nodeName;)if(u+=1,t.childNodes[v].data===e.childNodes[u].data){r=!0;break}if(!r)return g.push((new a).setValue(this.options._const.action,this.options._const.modifyTextElement).setValue(this.options._const.route,n.concat(v)).setValue(this.options._const.oldValue,c.data).setValue(this.options._const.newValue,t.childNodes[v].data)),g}}else g.push((new a).setValue(this.options._const.action,this.options._const.removeTextElement).setValue(this.options._const.route,n.concat(v)).setValue(this.options._const.value,c.data)),p.splice(v,1),V=Math.min(p.length,_.length),v-=1;else g.push((new a).setValue(this.options._const.action,this.options._const.removeElement).setValue(this.options._const.route,n.concat(v)).setValue(this.options._const.element,f(c))),p.splice(v,1),V=Math.min(p.length,_.length),v-=1;else if(!0===_[v])"#text"===(c=t.childNodes[v]).nodeName?(g.push((new a).setValue(this.options._const.action,this.options._const.addTextElement).setValue(this.options._const.route,n.concat(v)).setValue(this.options._const.value,c.data)),p.splice(v,0,!0),V=Math.min(p.length,_.length),N-=1):(g.push((new a).setValue(this.options._const.action,this.options._const.addElement).setValue(this.options._const.route,n.concat(v)).setValue(this.options._const.element,f(c))),p.splice(v,0,!0),V=Math.min(p.length,_.length),N-=1);else if(p[v]!==_[v]){if(g.length>0)return g;if(l=o[p[v]],(i=Math.min(l.newValue,e.childNodes.length-l.length))!==l.oldValue){s=!1;for(var b=0;b entering "+e,t)},T.prototype.fout=function(e,t){this.log("│<──┘ generated return value",t),this.padding=this.padding.substring(0,this.padding.length-this.pad.length)},T.prototype.format=function(e,t){return function(e){for(e=""+e;e.length<4;)e="0"+e;return e}(t)+"> "+this.padding+e},T.prototype.log=function(){var e=Array.prototype.slice.call(arguments),t=function(e){return e?"string"==typeof e?e:e instanceof HTMLElement?e.outerHTML||"":e instanceof Array?"["+e.map(t).join(",")+"]":e.toString()||e.valueOf()||"":""};e=e.map(t).join(", "),this.messages.push(this.format(e,this.tick++))},T.prototype.toString=function(){for(var e="└───";e.length<=this.padding.length+this.pad.length;)e+="× ";var t=this.padding;return this.padding="",e=this.format(e,this.tick),this.padding=t,this.messages.join("\n")+"\n"+e},e.DiffDOM=O,e.TraceLogger=T,e.nodeToObj=v,e.stringToObj=x,e}({});
+//# sourceMappingURL=diffDOM.js.map
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/scripts/diffDOM.js.map b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/scripts/diffDOM.js.map
new file mode 100644
index 00000000..668e8a16
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/scripts/diffDOM.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"diffDOM.js","sources":["../src/diffDOM/dom/fromVirtual.js","../src/diffDOM/dom/apply.js","../src/diffDOM/dom/undo.js","../src/diffDOM/virtual/helpers.js","../src/diffDOM/virtual/apply.js","../src/diffDOM/virtual/fromDOM.js","../src/diffDOM/virtual/fromString.js","../src/diffDOM/virtual/diff.js","../src/diffDOM/index.js","../src/TraceLogger.js"],"sourcesContent":["export function objToNode(objNode, insideSvg, options) {\n let node\n if (objNode.nodeName === '#text') {\n node = options.document.createTextNode(objNode.data)\n\n } else if (objNode.nodeName === '#comment') {\n node = options.document.createComment(objNode.data)\n } else {\n if (insideSvg) {\n node = options.document.createElementNS('http://www.w3.org/2000/svg', objNode.nodeName)\n } else if (objNode.nodeName.toLowerCase() === 'svg') {\n node = options.document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n insideSvg = true\n } else {\n node = options.document.createElement(objNode.nodeName)\n }\n if (objNode.attributes) {\n Object.entries(objNode.attributes).forEach(([key, value]) => node.setAttribute(key, value))\n }\n if (objNode.childNodes) {\n objNode.childNodes.forEach(childNode => node.appendChild(objToNode(childNode, insideSvg, options)))\n }\n if (options.valueDiffing) {\n if (objNode.value) {\n node.value = objNode.value\n }\n if (objNode.checked) {\n node.checked = objNode.checked\n }\n if (objNode.selected) {\n node.selected = objNode.selected\n }\n }\n }\n return node\n}\n","import {objToNode} from \"./fromVirtual\"\n\n// ===== Apply a diff =====\n\nfunction getFromRoute(node, route) {\n route = route.slice()\n while (route.length > 0) {\n if (!node.childNodes) {\n return false\n }\n const c = route.splice(0, 1)[0]\n node = node.childNodes[c]\n }\n return node\n}\n\nexport function applyDiff(\n tree,\n diff,\n options // {preDiffApply, postDiffApply, textDiff, valueDiffing, _const}\n ) {\n let node = getFromRoute(tree, diff[options._const.route])\n let newNode\n let reference\n let route\n let nodeArray\n let c\n\n // pre-diff hook\n const info = {\n diff,\n node\n }\n\n if (options.preDiffApply(info)) {\n return true\n }\n\n switch (diff[options._const.action]) {\n case options._const.addAttribute:\n if (!node || !node.setAttribute) {\n return false\n }\n node.setAttribute(diff[options._const.name], diff[options._const.value])\n break\n case options._const.modifyAttribute:\n if (!node || !node.setAttribute) {\n return false\n }\n node.setAttribute(diff[options._const.name], diff[options._const.newValue])\n if (node.nodeName === 'INPUT' && diff[options._const.name] === 'value') {\n node.value = diff[options._const.newValue]\n }\n break\n case options._const.removeAttribute:\n if (!node || !node.removeAttribute) {\n return false\n }\n node.removeAttribute(diff[options._const.name])\n break\n case options._const.modifyTextElement:\n if (!node || node.nodeType !== 3) {\n return false\n }\n options.textDiff(node, node.data, diff[options._const.oldValue], diff[options._const.newValue])\n break\n case options._const.modifyValue:\n if (!node || typeof node.value === 'undefined') {\n return false\n }\n node.value = diff[options._const.newValue]\n break\n case options._const.modifyComment:\n if (!node || typeof node.data === 'undefined') {\n return false\n }\n options.textDiff(node, node.data, diff[options._const.oldValue], diff[options._const.newValue])\n break\n case options._const.modifyChecked:\n if (!node || typeof node.checked === 'undefined') {\n return false\n }\n node.checked = diff[options._const.newValue]\n break\n case options._const.modifySelected:\n if (!node || typeof node.selected === 'undefined') {\n return false\n }\n node.selected = diff[options._const.newValue]\n break\n case options._const.replaceElement:\n node.parentNode.replaceChild(\n objToNode(\n diff[options._const.newValue],\n node.namespaceURI === 'http://www.w3.org/2000/svg',\n options\n ),\n node\n )\n break\n case options._const.relocateGroup:\n nodeArray = Array(...new Array(diff.groupLength)).map(() => node.removeChild(node.childNodes[diff[options._const.from]]))\n nodeArray.forEach((childNode, index) => {\n if (index === 0) {\n reference = node.childNodes[diff[options._const.to]]\n }\n node.insertBefore(childNode, reference || null)\n })\n break\n case options._const.removeElement:\n node.parentNode.removeChild(node)\n break\n case options._const.addElement:\n route = diff[options._const.route].slice()\n c = route.splice(route.length - 1, 1)[0]\n node = getFromRoute(tree, route)\n node.insertBefore(\n objToNode(\n diff[options._const.element],\n node.namespaceURI === 'http://www.w3.org/2000/svg',\n options\n ),\n node.childNodes[c] || null\n )\n break\n case options._const.removeTextElement:\n if (!node || node.nodeType !== 3) {\n return false\n }\n node.parentNode.removeChild(node)\n break\n case options._const.addTextElement:\n route = diff[options._const.route].slice()\n c = route.splice(route.length - 1, 1)[0]\n newNode = options.document.createTextNode(diff[options._const.value])\n node = getFromRoute(tree, route)\n if (!node || !node.childNodes) {\n return false\n }\n node.insertBefore(newNode, node.childNodes[c] || null)\n break\n default:\n console.log('unknown action')\n }\n\n // if a new node was created, we might be interested in its\n // post diff hook\n info.newNode = newNode\n options.postDiffApply(info)\n\n return true\n}\n\nexport function applyDOM(tree, diffs, options) {\n return diffs.every(diff => applyDiff(tree, diff, options))\n}\n","import {applyDiff} from \"./apply\"\n\n// ===== Undo a diff =====\n\nfunction swap(obj, p1, p2) {\n const tmp = obj[p1]\n obj[p1] = obj[p2]\n obj[p2] = tmp\n}\n\nfunction undoDiff(\n tree,\n diff,\n options // {preDiffApply, postDiffApply, textDiff, valueDiffing, _const}\n) {\n\n switch (diff[options._const.action]) {\n case options._const.addAttribute:\n diff[options._const.action] = options._const.removeAttribute\n applyDiff(tree, diff, options)\n break\n case options._const.modifyAttribute:\n swap(diff, options._const.oldValue, options._const.newValue)\n applyDiff(tree, diff, options)\n break\n case options._const.removeAttribute:\n diff[options._const.action] = options._const.addAttribute\n applyDiff(tree, diff, options)\n break\n case options._const.modifyTextElement:\n swap(diff, options._const.oldValue, options._const.newValue)\n applyDiff(tree, diff, options)\n break\n case options._const.modifyValue:\n swap(diff, options._const.oldValue, options._const.newValue)\n applyDiff(tree, diff, options)\n break\n case options._const.modifyComment:\n swap(diff, options._const.oldValue, options._const.newValue)\n applyDiff(tree, diff, options)\n break\n case options._const.modifyChecked:\n swap(diff, options._const.oldValue, options._const.newValue)\n applyDiff(tree, diff, options)\n break\n case options._const.modifySelected:\n swap(diff, options._const.oldValue, options._const.newValue)\n applyDiff(tree, diff, options)\n break\n case options._const.replaceElement:\n swap(diff, options._const.oldValue, options._const.newValue)\n applyDiff(tree, diff, options)\n break\n case options._const.relocateGroup:\n swap(diff, options._const.from, options._const.to)\n applyDiff(tree, diff, options)\n break\n case options._const.removeElement:\n diff[options._const.action] = options._const.addElement\n applyDiff(tree, diff, options)\n break\n case options._const.addElement:\n diff[options._const.action] = options._const.removeElement\n applyDiff(tree, diff, options)\n break\n case options._const.removeTextElement:\n diff[options._const.action] = options._const.addTextElement\n applyDiff(tree, diff, options)\n break\n case options._const.addTextElement:\n diff[options._const.action] = options._const.removeTextElement\n applyDiff(tree, diff, options)\n break\n default:\n console.log('unknown action')\n }\n\n}\n\nexport function undoDOM(tree, diffs, options) {\n if (!diffs.length) {\n diffs = [diffs]\n }\n diffs = diffs.slice()\n diffs.reverse()\n diffs.forEach(diff => {\n undoDiff(tree, diff, options)\n })\n}\n","export class Diff {\n constructor(options = {}) {\n Object.entries(options).forEach(([key, value]) => this[key] = value)\n }\n\n toString() {\n return JSON.stringify(this)\n }\n\n setValue(aKey, aValue) {\n this[aKey] = aValue\n return this\n }\n}\n\nfunction elementDescriptors(el) {\n const output = []\n output.push(el.nodeName)\n if (el.nodeName !== '#text' && el.nodeName !== '#comment') {\n if (el.attributes) {\n if (el.attributes['class']) {\n output.push(`${el.nodeName}.${el.attributes['class'].replace(/ /g, '.')}`)\n }\n if (el.attributes.id) {\n output.push(`${el.nodeName}#${el.attributes.id}`)\n }\n }\n\n }\n return output\n}\n\nfunction findUniqueDescriptors(li) {\n const uniqueDescriptors = {}\n const duplicateDescriptors = {}\n\n li.forEach(node => {\n elementDescriptors(node).forEach(descriptor => {\n const inUnique = descriptor in uniqueDescriptors\n const inDupes = descriptor in duplicateDescriptors\n if (!inUnique && !inDupes) {\n uniqueDescriptors[descriptor] = true\n } else if (inUnique) {\n delete uniqueDescriptors[descriptor]\n duplicateDescriptors[descriptor] = true\n }\n })\n })\n\n return uniqueDescriptors\n}\n\nfunction uniqueInBoth(l1, l2) {\n const l1Unique = findUniqueDescriptors(l1)\n const l2Unique = findUniqueDescriptors(l2)\n const inBoth = {}\n\n Object.keys(l1Unique).forEach(key => {\n if (l2Unique[key]) {\n inBoth[key] = true\n }\n })\n\n return inBoth\n}\n\nexport function removeDone(tree) {\n delete tree.outerDone\n delete tree.innerDone\n delete tree.valueDone\n if (tree.childNodes) {\n return tree.childNodes.every(removeDone)\n } else {\n return true\n }\n}\n\nexport function isEqual(e1, e2) {\n if (!['nodeName', 'value', 'checked', 'selected', 'data'].every(element => {\n if (e1[element] !== e2[element]) {\n return false\n }\n return true\n })) {\n return false\n }\n\n if (Boolean(e1.attributes) !== Boolean(e2.attributes)) {\n return false\n }\n\n if (Boolean(e1.childNodes) !== Boolean(e2.childNodes)) {\n return false\n }\n if (e1.attributes) {\n const e1Attributes = Object.keys(e1.attributes)\n const e2Attributes = Object.keys(e2.attributes)\n\n if (e1Attributes.length !== e2Attributes.length) {\n return false\n }\n if (!e1Attributes.every(attribute => {\n if (e1.attributes[attribute] !== e2.attributes[attribute]) {\n return false\n }\n return true\n })) {\n return false\n }\n }\n if (e1.childNodes) {\n if (e1.childNodes.length !== e2.childNodes.length) {\n return false\n }\n if (!e1.childNodes.every((childNode, index) => isEqual(childNode, e2.childNodes[index]))) {\n\n return false\n }\n\n }\n\n return true\n}\n\n\nexport function roughlyEqual(e1, e2, uniqueDescriptors, sameSiblings, preventRecursion) {\n\n if (!e1 || !e2) {\n return false\n }\n\n if (e1.nodeName !== e2.nodeName) {\n return false\n }\n\n if (e1.nodeName === '#text') {\n // Note that we initially don't care what the text content of a node is,\n // the mere fact that it's the same tag and \"has text\" means it's roughly\n // equal, and then we can find out the true text difference later.\n return preventRecursion ? true : e1.data === e2.data\n }\n\n\n if (e1.nodeName in uniqueDescriptors) {\n return true\n }\n\n if (e1.attributes && e2.attributes) {\n\n if (e1.attributes.id) {\n if (e1.attributes.id !== e2.attributes.id) {\n return false\n } else {\n const idDescriptor = `${e1.nodeName}#${e1.attributes.id}`\n if (idDescriptor in uniqueDescriptors) {\n return true\n }\n }\n }\n if (e1.attributes['class'] && e1.attributes['class'] === e2.attributes['class']) {\n const classDescriptor = `${e1.nodeName}.${e1.attributes['class'].replace(/ /g, '.')}`\n if (classDescriptor in uniqueDescriptors) {\n return true\n }\n }\n }\n\n if (sameSiblings) {\n return true\n }\n\n const nodeList1 = e1.childNodes ? e1.childNodes.slice().reverse() : []\n const nodeList2 = e2.childNodes ? e2.childNodes.slice().reverse() : []\n\n if (nodeList1.length !== nodeList2.length) {\n return false\n }\n\n if (preventRecursion) {\n return nodeList1.every((element, index) => element.nodeName === nodeList2[index].nodeName)\n } else {\n // note: we only allow one level of recursion at any depth. If 'preventRecursion'\n // was not set, we must explicitly force it to true for child iterations.\n const childUniqueDescriptors = uniqueInBoth(nodeList1, nodeList2)\n return nodeList1.every((element, index) => roughlyEqual(element, nodeList2[index], childUniqueDescriptors, true, true))\n }\n}\n\n\nexport function cloneObj(obj) { // TODO: Do we really need to clone here? Is it not enough to just return the original object?\n return JSON.parse(JSON.stringify(obj))\n}\n/**\n * based on https://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Longest_common_substring#JavaScript\n */\nfunction findCommonSubsets(c1, c2, marked1, marked2) {\n let lcsSize = 0\n let index = []\n const c1Length = c1.length\n const c2Length = c2.length\n\n const // set up the matching table\n matches = Array(...new Array(c1Length + 1)).map(() => [])\n\n const uniqueDescriptors = uniqueInBoth(c1, c2)\n\n let // If all of the elements are the same tag, id and class, then we can\n // consider them roughly the same even if they have a different number of\n // children. This will reduce removing and re-adding similar elements.\n subsetsSame = c1Length === c2Length\n\n if (subsetsSame) {\n\n c1.some((element, i) => {\n const c1Desc = elementDescriptors(element)\n const c2Desc = elementDescriptors(c2[i])\n if (c1Desc.length !== c2Desc.length) {\n subsetsSame = false\n return true\n }\n c1Desc.some((description, i) => {\n if (description !== c2Desc[i]) {\n subsetsSame = false\n return true\n }\n })\n if (!subsetsSame) {\n return true\n }\n })\n }\n\n // fill the matches with distance values\n for (let c1Index = 0; c1Index < c1Length; c1Index++) {\n const c1Element = c1[c1Index]\n for (let c2Index = 0; c2Index < c2Length; c2Index++) {\n const c2Element = c2[c2Index]\n if (!marked1[c1Index] && !marked2[c2Index] && roughlyEqual(c1Element, c2Element, uniqueDescriptors, subsetsSame)) {\n matches[c1Index + 1][c2Index + 1] = (matches[c1Index][c2Index] ? matches[c1Index][c2Index] + 1 : 1)\n if (matches[c1Index + 1][c2Index + 1] >= lcsSize) {\n lcsSize = matches[c1Index + 1][c2Index + 1]\n index = [c1Index + 1, c2Index + 1]\n }\n } else {\n matches[c1Index + 1][c2Index + 1] = 0\n }\n }\n }\n\n if (lcsSize === 0) {\n return false\n }\n\n return {\n oldValue: index[0] - lcsSize,\n newValue: index[1] - lcsSize,\n length: lcsSize\n }\n}\n\n/**\n * This should really be a predefined function in Array...\n */\nfunction makeArray(n, v) {\n return Array(...new Array(n)).map(() => v)\n}\n\n/**\n * Generate arrays that indicate which node belongs to which subset,\n * or whether it's actually an orphan node, existing in only one\n * of the two trees, rather than somewhere in both.\n *\n * So if t1 = , t2 = .\n * The longest subset is \" \" (length 2), so it will group 0.\n * The second longest is \" \" (length 1), so it will be group 1.\n * gaps1 will therefore be [1,0,0] and gaps2 [0,0,1].\n *\n * If an element is not part of any group, it will stay being 'true', which\n * is the initial value. For example:\n * t1 =
, t2 = \n *\n * The \"
\" and \" \" do only show up in one of the two and will\n * therefore be marked by \"true\". The remaining parts are parts of the\n * groups 0 and 1:\n * gaps1 = [1, true, 0, 0], gaps2 = [true, 0, 0, 1]\n *\n */\nexport function getGapInformation(t1, t2, stable) {\n const gaps1 = t1.childNodes ? makeArray(t1.childNodes.length, true) : []\n const gaps2 = t2.childNodes ? makeArray(t2.childNodes.length, true) : []\n let group = 0\n\n // give elements from the same subset the same group number\n stable.forEach(subset => {\n const endOld = subset.oldValue + subset.length\n const endNew = subset.newValue + subset.length\n\n for (let j = subset.oldValue; j < endOld; j += 1) {\n gaps1[j] = group\n }\n for (let j = subset.newValue; j < endNew; j += 1) {\n gaps2[j] = group\n }\n group += 1\n })\n\n return {\n gaps1,\n gaps2\n }\n}\n\n/**\n * Find all matching subsets, based on immediate child differences only.\n */\nexport function markSubTrees(oldTree, newTree) {\n // note: the child lists are views, and so update as we update old/newTree\n const oldChildren = oldTree.childNodes ? oldTree.childNodes : []\n\n const newChildren = newTree.childNodes ? newTree.childNodes : []\n const marked1 = makeArray(oldChildren.length, false)\n const marked2 = makeArray(newChildren.length, false)\n const subsets = []\n let subset = true\n\n const returnIndex = function() {\n return arguments[1]\n }\n\n const markBoth = i => {\n marked1[subset.oldValue + i] = true\n marked2[subset.newValue + i] = true\n }\n\n while (subset) {\n subset = findCommonSubsets(oldChildren, newChildren, marked1, marked2)\n if (subset) {\n subsets.push(subset)\n const subsetArray = Array(...new Array(subset.length)).map(returnIndex)\n subsetArray.forEach(item => markBoth(item))\n }\n }\n\n oldTree.subsets = subsets\n oldTree.subsetsAge = 100\n return subsets\n}\n\nexport class DiffTracker {\n constructor() {\n this.list = []\n }\n\n add(diffs) {\n this.list.push(...diffs)\n }\n forEach(fn) {\n this.list.forEach(li => fn(li))\n }\n\n}\n","import {cloneObj} from \"./helpers\"\n\n// ===== Apply a virtual diff =====\n\nfunction getFromVirtualRoute(tree, route) {\n let node = tree\n let parentNode\n let nodeIndex\n\n route = route.slice()\n while (route.length > 0) {\n if (!node.childNodes) {\n return false\n }\n nodeIndex = route.splice(0, 1)[0]\n parentNode = node\n node = node.childNodes[nodeIndex]\n }\n return {\n node,\n parentNode,\n nodeIndex\n }\n}\n\nfunction applyVirtualDiff(\n tree,\n diff,\n options // {preVirtualDiffApply, postVirtualDiffApply, _const}\n ) {\n const routeInfo = getFromVirtualRoute(tree, diff[options._const.route])\n let node = routeInfo.node\n const parentNode = routeInfo.parentNode\n const nodeIndex = routeInfo.nodeIndex\n const newSubsets = []\n\n // pre-diff hook\n const info = {\n diff,\n node\n }\n\n if (options.preVirtualDiffApply(info)) {\n return true\n }\n\n let newNode\n let nodeArray\n let route\n let c\n switch (diff[options._const.action]) {\n case options._const.addAttribute:\n if (!node.attributes) {\n node.attributes = {}\n }\n\n node.attributes[diff[options._const.name]] = diff[options._const.value]\n\n if (diff[options._const.name] === 'checked') {\n node.checked = true\n } else if (diff[options._const.name] === 'selected') {\n node.selected = true\n } else if (node.nodeName === 'INPUT' && diff[options._const.name] === 'value') {\n node.value = diff[options._const.value]\n }\n\n break\n case options._const.modifyAttribute:\n node.attributes[diff[options._const.name]] = diff[options._const.newValue]\n break\n case options._const.removeAttribute:\n\n delete node.attributes[diff[options._const.name]]\n\n if (Object.keys(node.attributes).length === 0) {\n delete node.attributes\n }\n\n if (diff[options._const.name] === 'checked') {\n node.checked = false\n } else if (diff[options._const.name] === 'selected') {\n delete node.selected\n } else if (node.nodeName === 'INPUT' && diff[options._const.name] === 'value') {\n delete node.value\n }\n\n break\n case options._const.modifyTextElement:\n node.data = diff[options._const.newValue]\n break\n case options._const.modifyValue:\n node.value = diff[options._const.newValue]\n break\n case options._const.modifyComment:\n node.data = diff[options._const.newValue]\n break\n case options._const.modifyChecked:\n node.checked = diff[options._const.newValue]\n break\n case options._const.modifySelected:\n node.selected = diff[options._const.newValue]\n break\n case options._const.replaceElement:\n newNode = cloneObj(diff[options._const.newValue])\n newNode.outerDone = true\n newNode.innerDone = true\n newNode.valueDone = true\n parentNode.childNodes[nodeIndex] = newNode\n break\n case options._const.relocateGroup:\n nodeArray = node.childNodes.splice(diff[options._const.from], diff.groupLength).reverse()\n nodeArray.forEach(movedNode => node.childNodes.splice(diff[options._const.to], 0, movedNode))\n if (node.subsets) {\n node.subsets.forEach(map => {\n if (diff[options._const.from] < diff[options._const.to] && map.oldValue <= diff[options._const.to] && map.oldValue > diff[options._const.from]) {\n map.oldValue -= diff.groupLength\n const splitLength = map.oldValue + map.length - diff[options._const.to]\n if (splitLength > 0) {\n // new insertion splits map.\n newSubsets.push({\n oldValue: diff[options._const.to] + diff.groupLength,\n newValue: map.newValue + map.length - splitLength,\n length: splitLength\n })\n map.length -= splitLength\n }\n } else if (diff[options._const.from] > diff[options._const.to] && map.oldValue > diff[options._const.to] && map.oldValue < diff[options._const.from]) {\n map.oldValue += diff.groupLength\n const splitLength = map.oldValue + map.length - diff[options._const.to]\n if (splitLength > 0) {\n // new insertion splits map.\n newSubsets.push({\n oldValue: diff[options._const.to] + diff.groupLength,\n newValue: map.newValue + map.length - splitLength,\n length: splitLength\n })\n map.length -= splitLength\n }\n } else if (map.oldValue === diff[options._const.from]) {\n map.oldValue = diff[options._const.to]\n }\n })\n }\n\n break\n case options._const.removeElement:\n parentNode.childNodes.splice(nodeIndex, 1)\n if (parentNode.subsets) {\n parentNode.subsets.forEach(map => {\n if (map.oldValue > nodeIndex) {\n map.oldValue -= 1\n } else if (map.oldValue === nodeIndex) {\n map.delete = true\n } else if (map.oldValue < nodeIndex && (map.oldValue + map.length) > nodeIndex) {\n if (map.oldValue + map.length - 1 === nodeIndex) {\n map.length--\n } else {\n newSubsets.push({\n newValue: map.newValue + nodeIndex - map.oldValue,\n oldValue: nodeIndex,\n length: map.length - nodeIndex + map.oldValue - 1\n })\n map.length = nodeIndex - map.oldValue\n }\n }\n })\n }\n node = parentNode\n break\n case options._const.addElement:\n route = diff[options._const.route].slice()\n c = route.splice(route.length - 1, 1)[0]\n node = getFromVirtualRoute(tree, route).node\n newNode = cloneObj(diff[options._const.element])\n newNode.outerDone = true\n newNode.innerDone = true\n newNode.valueDone = true\n\n if (!node.childNodes) {\n node.childNodes = []\n }\n\n if (c >= node.childNodes.length) {\n node.childNodes.push(newNode)\n } else {\n node.childNodes.splice(c, 0, newNode)\n }\n if (node.subsets) {\n node.subsets.forEach(map => {\n if (map.oldValue >= c) {\n map.oldValue += 1\n } else if (map.oldValue < c && (map.oldValue + map.length) > c) {\n const splitLength = map.oldValue + map.length - c\n newSubsets.push({\n newValue: map.newValue + map.length - splitLength,\n oldValue: c + 1,\n length: splitLength\n })\n map.length -= splitLength\n }\n })\n }\n break\n case options._const.removeTextElement:\n parentNode.childNodes.splice(nodeIndex, 1)\n if (parentNode.nodeName === 'TEXTAREA') {\n delete parentNode.value\n }\n if (parentNode.subsets) {\n parentNode.subsets.forEach(map => {\n if (map.oldValue > nodeIndex) {\n map.oldValue -= 1\n } else if (map.oldValue === nodeIndex) {\n map.delete = true\n } else if (map.oldValue < nodeIndex && (map.oldValue + map.length) > nodeIndex) {\n if (map.oldValue + map.length - 1 === nodeIndex) {\n map.length--\n } else {\n newSubsets.push({\n newValue: map.newValue + nodeIndex - map.oldValue,\n oldValue: nodeIndex,\n length: map.length - nodeIndex + map.oldValue - 1\n })\n map.length = nodeIndex - map.oldValue\n }\n }\n })\n }\n node = parentNode\n break\n case options._const.addTextElement:\n route = diff[options._const.route].slice()\n c = route.splice(route.length - 1, 1)[0]\n newNode = {}\n newNode.nodeName = '#text'\n newNode.data = diff[options._const.value]\n node = getFromVirtualRoute(tree, route).node\n if (!node.childNodes) {\n node.childNodes = []\n }\n\n if (c >= node.childNodes.length) {\n node.childNodes.push(newNode)\n } else {\n node.childNodes.splice(c, 0, newNode)\n }\n if (node.nodeName === 'TEXTAREA') {\n node.value = diff[options._const.newValue]\n }\n if (node.subsets) {\n node.subsets.forEach(map => {\n if (map.oldValue >= c) {\n map.oldValue += 1\n }\n if (map.oldValue < c && (map.oldValue + map.length) > c) {\n const splitLength = map.oldValue + map.length - c\n newSubsets.push({\n newValue: map.newValue + map.length - splitLength,\n oldValue: c + 1,\n length: splitLength\n })\n map.length -= splitLength\n }\n })\n }\n break\n default:\n console.log('unknown action')\n }\n\n if (node.subsets) {\n node.subsets = node.subsets.filter(map => !map.delete && map.oldValue !== map.newValue)\n if (newSubsets.length) {\n node.subsets = node.subsets.concat(newSubsets)\n }\n }\n\n // capture newNode for the callback\n info.newNode = newNode\n options.postVirtualDiffApply(info)\n\n return\n}\n\nexport function applyVirtual(tree, diffs, options) {\n diffs.forEach(diff => {\n applyVirtualDiff(tree, diff, options)\n })\n return true\n}\n","export function nodeToObj(aNode, options = {}) {\n const objNode = {}\n objNode.nodeName = aNode.nodeName\n if (objNode.nodeName === '#text' || objNode.nodeName === '#comment') {\n objNode.data = aNode.data\n } else {\n if (aNode.attributes && aNode.attributes.length > 0) {\n objNode.attributes = {}\n const nodeArray = Array.prototype.slice.call(aNode.attributes)\n nodeArray.forEach(attribute => objNode.attributes[attribute.name] = attribute.value)\n }\n if (objNode.nodeName === 'TEXTAREA') {\n objNode.value = aNode.value\n } else if (aNode.childNodes && aNode.childNodes.length > 0) {\n objNode.childNodes = []\n const nodeArray = Array.prototype.slice.call(aNode.childNodes)\n nodeArray.forEach(childNode => objNode.childNodes.push(nodeToObj(childNode, options)))\n }\n if (options.valueDiffing) {\n if (aNode.checked !== undefined && aNode.type && ['radio', 'checkbox'].includes(aNode.type.toLowerCase())) {\n objNode.checked = aNode.checked\n } else if (aNode.value !== undefined) {\n objNode.value = aNode.value\n }\n if (aNode.selected !== undefined) {\n objNode.selected = aNode.selected\n }\n }\n }\n return objNode\n}\n","// from html-parse-stringify (MIT)\n\nconst tagRE = /<(?:\"[^\"]*\"['\"]*|'[^']*'['\"]*|[^'\">])+>/g\n// re-used obj for quick lookups of components\nconst empty = Object.create ? Object.create(null) : {}\nconst attrRE = /\\s([^'\"/\\s><]+?)[\\s/>]|([^\\s=]+)=\\s?(\".*?\"|'.*?')/g\n\n\nfunction unescape(string) {\n return string.replace(/</g, '<').replace(/>/g, '>')\n.replace(/&/g, '&')\n}\n\n// create optimized lookup object for\n// void elements as listed here:\n// http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\nconst lookup = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n menuItem: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true\n}\n\n\nfunction parseTag(tag) {\n const res = {\n nodeName: '',\n attributes: {}\n }\n\n let tagMatch = tag.match(/<\\/?([^\\s]+?)[/\\s>]/)\n if (tagMatch) {\n res.nodeName = tagMatch[1].toUpperCase()\n if (lookup[tagMatch[1].toLowerCase()] || tag.charAt(tag.length - 2) === '/') {\n res.voidElement = true\n }\n\n // handle comment tag\n if (res.nodeName.startsWith('!--')) {\n const endIndex = tag.indexOf('-->')\n return {\n type: 'comment',\n data: endIndex !== -1 ? tag.slice(4, endIndex) : ''\n }\n }\n }\n\n let reg = new RegExp(attrRE)\n let result = null\n let done = false\n while (!done) {\n result = reg.exec(tag)\n\n if (result === null) {\n done = true\n } else if (result[0].trim()) {\n if (result[1]) {\n let attr = result[1].trim()\n let arr = [attr, \"\"]\n\n if (attr.indexOf(\"=\") > -1) arr = attr.split(\"=\")\n\n res.attributes[arr[0]] = arr[1]\n reg.lastIndex--\n } else if (result[2]) res.attributes[result[2]] = result[3].trim().substring(1, result[3].length - 1)\n }\n }\n\n return res\n}\n\nfunction parse(\n html,\n options = {components: empty}\n) {\n const result = []\n let current\n let level = -1\n const arr = []\n let inComponent = false\n\n html.replace(tagRE, (tag, index) => {\n if (inComponent) {\n if (tag !== (`${current.nodeName}>`)) {\n return\n } else {\n inComponent = false\n }\n }\n const isOpen = tag.charAt(1) !== '/'\n const isComment = tag.startsWith('
+image/svg+xml
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/file.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/file.svg
new file mode 100644
index 00000000..f4d010cd
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/file.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/fiveserver.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/fiveserver.svg
new file mode 100644
index 00000000..364d518a
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/fiveserver.svg
@@ -0,0 +1,326 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/folder.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/folder.svg
new file mode 100644
index 00000000..f78e8640
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/folder.svg
@@ -0,0 +1,47 @@
+
+image/svg+xml
\ No newline at end of file
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/font.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/font.svg
new file mode 100644
index 00000000..ffb76454
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/font.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/git.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/git.svg
new file mode 100644
index 00000000..6b7ed47b
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/git.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/h.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/h.svg
new file mode 100644
index 00000000..cd5049b5
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/h.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/html.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/html.svg
new file mode 100644
index 00000000..278123a3
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/html.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/image.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/image.svg
new file mode 100644
index 00000000..380ac3d2
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/image.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/java.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/java.svg
new file mode 100644
index 00000000..da8cc1f6
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/java.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/javascript.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/javascript.svg
new file mode 100644
index 00000000..cf89d6ec
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/javascript.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/json.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/json.svg
new file mode 100644
index 00000000..01df7610
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/json.svg
@@ -0,0 +1 @@
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/key.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/key.svg
new file mode 100644
index 00000000..913277ed
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/key.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/less.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/less.svg
new file mode 100644
index 00000000..0ad7e9e4
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/less.svg
@@ -0,0 +1 @@
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/markdown.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/markdown.svg
new file mode 100644
index 00000000..b9b2c5f4
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/markdown.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/nodejs.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/nodejs.svg
new file mode 100644
index 00000000..1605f3e8
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/nodejs.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/npm.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/npm.svg
new file mode 100644
index 00000000..06d6036e
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/npm.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+ n
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/pdf.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/pdf.svg
new file mode 100644
index 00000000..5d1bbe47
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/pdf.svg
@@ -0,0 +1 @@
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/php.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/php.svg
new file mode 100644
index 00000000..65133a54
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/php.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/prettier.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/prettier.svg
new file mode 100644
index 00000000..8853bc1c
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/prettier.svg
@@ -0,0 +1,35 @@
+
+prettier-icon-dark
+Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/react.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/react.svg
new file mode 100644
index 00000000..4cfa7573
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/react.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/react_ts.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/react_ts.svg
new file mode 100644
index 00000000..c96204ce
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/react_ts.svg
@@ -0,0 +1 @@
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/readme.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/readme.svg
new file mode 100644
index 00000000..9148cfd8
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/readme.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/sass.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/sass.svg
new file mode 100644
index 00000000..2964faa9
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/sass.svg
@@ -0,0 +1 @@
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/settings.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/settings.svg
new file mode 100644
index 00000000..668cbc2a
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/settings.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/svg.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/svg.svg
new file mode 100644
index 00000000..498c5af5
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/svg.svg
@@ -0,0 +1 @@
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/test-js.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/test-js.svg
new file mode 100644
index 00000000..6fd2fdce
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/test-js.svg
@@ -0,0 +1 @@
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/test-jsx.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/test-jsx.svg
new file mode 100644
index 00000000..829eb4fd
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/test-jsx.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/test-ts.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/test-ts.svg
new file mode 100644
index 00000000..02cd9c27
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/test-ts.svg
@@ -0,0 +1 @@
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/typescript-def.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/typescript-def.svg
new file mode 100644
index 00000000..bbef5f10
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/typescript-def.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/typescript.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/typescript.svg
new file mode 100644
index 00000000..0950c42f
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/typescript.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/video.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/video.svg
new file mode 100644
index 00000000..70407193
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/video.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/xml.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/xml.svg
new file mode 100644
index 00000000..d0db9476
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/xml.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/yaml.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/yaml.svg
new file mode 100644
index 00000000..0eb7ce85
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/yaml.svg
@@ -0,0 +1 @@
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/zip.svg b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/zip.svg
new file mode 100644
index 00000000..cfa2c24f
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/icons/zip.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/style.css b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/style.css
new file mode 100644
index 00000000..03e4f205
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-explorer/style.css
@@ -0,0 +1,201 @@
+ul#files {
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ column-count: 3;
+}
+ul#files li {
+ margin-bottom: 6px;
+ line-height: 30px;
+}
+ul#files li a {
+ display: block;
+ height: 30px;
+ border: 1px solid #e9e9e9;
+ border-radius: 5px;
+ padding: 2px;
+ /* overflow: hidden; */
+ /* white-space: nowrap; */
+}
+ul#files li a:focus,
+ul#files li a:hover {
+ background: rgba(255, 255, 255, 0.65);
+ border: 1px solid #dadada;
+}
+ul#files li a.highlight {
+ transition: background 0.4s ease-in-out;
+ background: #add6ff66;
+ border-color: #add6ff8c;
+}
+ul#files li a span {
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+ul#files li.hidden {
+ display: none;
+}
+#search {
+ display: block;
+ position: fixed;
+ top: 20px;
+ right: 20px;
+ width: 90px;
+ transition: width ease 0.2s, opacity ease 0.4s;
+ /* border-radius: 4px; */
+ -webkit-font-smoothing: antialiased;
+ text-align: left;
+ font: 14px 'Helvetica Neue', Arial, sans-serif;
+ padding: 6px 12px;
+ border: none;
+ background: #f1f1f1;
+ margin-bottom: 0;
+ outline: none;
+ opacity: 0.7;
+ color: #888;
+}
+#search:focus {
+ width: 120px;
+ opacity: 1;
+}
+@media (min-width: 1024px) {
+ input#search {
+ right: max(100px, calc(100vw / 2 - 512px));
+ }
+}
+
+/*views*/
+#files span {
+ display: inline-block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ text-indent: 10px;
+}
+#files .name {
+ background-repeat: no-repeat;
+ background-position: 6px center;
+}
+#files .icon .name {
+ text-indent: 28px;
+ background-size: 16px 16px;
+}
+
+/*tiles*/
+.view-tiles .name {
+ width: 100%;
+ background-position: 8px 5px;
+}
+.view-tiles .size,
+.view-tiles .date {
+ display: none;
+}
+
+/*details*/
+ul#files.view-details li {
+ float: none;
+ display: block;
+ width: 90%;
+}
+ul#files.view-details li.header {
+ height: 25px;
+ background: #000;
+ color: #fff;
+ font-weight: bold;
+}
+.view-details .header {
+ border-radius: 5px;
+}
+.view-details .name {
+ width: 60%;
+ background-position: 8px 5px;
+}
+.view-details .size {
+ width: 10%;
+}
+.view-details .date {
+ width: 30%;
+}
+.view-details .size,
+.view-details .date {
+ text-align: right;
+ direction: rtl;
+}
+
+/*small*/
+@media (max-width: 768px) {
+}
+
+/*smaller*/
+@media (max-width: 640px) {
+ ul#files {
+ column-count: 2;
+ }
+}
+
+/*mobile*/
+@media (max-width: 480px) {
+ body {
+ font-size: 14px;
+ line-height: 16px;
+ }
+ #search {
+ position: static;
+ width: 100%;
+ font-size: 2em;
+ line-height: 1.8em;
+ text-indent: 10px;
+ border: 0;
+ border-radius: 0;
+ padding: 10px 0;
+ margin: 0;
+ }
+ #search:focus {
+ width: 100%;
+ border: 0;
+ opacity: 1;
+ }
+ ul#files {
+ border-top: 1px solid #cacaca;
+ column-count: 1;
+ }
+ ul#files li {
+ float: none;
+ width: auto !important;
+ display: block;
+ border-bottom: 1px solid #cacaca;
+ font-size: 2em;
+ line-height: 1.2em;
+ text-indent: 0;
+ margin: 0;
+ }
+ ul#files li a {
+ height: auto;
+ border: 0;
+ border-radius: 0;
+ padding: 15px 10px;
+ }
+ ul#files li a span {
+ vertical-align: middle;
+ }
+ ul#files li a:focus,
+ ul#files li a:hover {
+ border: 0;
+ }
+ #files .header,
+ #files .size,
+ #files .date {
+ display: none !important;
+ }
+ #files .name {
+ float: none;
+ display: inline-block;
+ width: 100%;
+ text-indent: 0;
+ background-position: 0 50%;
+ }
+ #files .icon .name {
+ text-indent: 41px;
+ background-size: 28px 28px;
+ background-position: 2px center;
+ }
+}
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-php/README.md b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-php/README.md
new file mode 100644
index 00000000..7afccce9
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-php/README.md
@@ -0,0 +1 @@
+Files used by execPHP.ts
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-php/error.html b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-php/error.html
new file mode 100644
index 00000000..0f578336
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-php/error.html
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+ PHP ERROR
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-php/index.html b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-php/index.html
new file mode 100644
index 00000000..35917c8c
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-php/index.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+ PHP ERROR
+
+
+
+
+
+
+
+
+
PHP ERROR
+
{msg}
+
+
Install PHP
+
Download and install XAMPP .
+
+
Get PHP Path
+
Follow the steps below to get the path to the PHP executable:
+
+ Ubuntu: Enter which php in your Terminal.
+ macOS: Enter which php in your Terminal.
+ Windows: Search for php.exe.
+
+
+
Config File Example
+
+
// fiveserver.config.js
+module.exports = {
+ php: "/usr/bin/php" // macOS/Ubuntu
+ php: "C:\\xampp\\php\\php.exe" // Windows
+}
+
+
+
+
+
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-preview/LICENSE.js b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-preview/LICENSE.js
new file mode 100644
index 00000000..d66167f4
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-preview/LICENSE.js
@@ -0,0 +1,5 @@
+/**
+ * @copyright Copyright (c) 2006-2021, Ivan Sagalaev
+ * @license ${link https://github.com/highlightjs/highlight.js/blob/main/LICENSE|BSD-3-Clause}
+ * @description highlight.min.js, vs.min.css and vs2015.min.css are from Highlight.js 10.7.2 (00233d63) (https://github.com/highlightjs/highlight.js)
+ */
diff --git a/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-preview/highlight.min.js b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-preview/highlight.min.js
new file mode 100644
index 00000000..ffeb034a
--- /dev/null
+++ b/dotfiles/.vscode-oss/extensions/yandeu.five-server-0.3.1-universal/dist/bundle/public/serve-preview/highlight.min.js
@@ -0,0 +1,1358 @@
+/*
+ Highlight.js 10.7.2 (00233d63)
+ License: BSD-3-Clause
+ Copyright (c) 2006-2021, Ivan Sagalaev
+*/
+var hljs=function(){"use strict";function e(t){
+return t instanceof Map?t.clear=t.delete=t.set=()=>{
+throw Error("map is read-only")}:t instanceof Set&&(t.add=t.clear=t.delete=()=>{
+throw Error("set is read-only")
+}),Object.freeze(t),Object.getOwnPropertyNames(t).forEach((n=>{var i=t[n]
+;"object"!=typeof i||Object.isFrozen(i)||e(i)})),t}var t=e,n=e;t.default=n
+;class i{constructor(e){
+void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}
+ignoreMatch(){this.isMatchIgnored=!0}}function s(e){
+return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")
+}function a(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t]
+;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}const r=e=>!!e.kind
+;class l{constructor(e,t){
+this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){
+this.buffer+=s(e)}openNode(e){if(!r(e))return;let t=e.kind
+;e.sublanguage||(t=`${this.classPrefix}${t}`),this.span(t)}closeNode(e){
+r(e)&&(this.buffer+="")}value(){return this.buffer}span(e){
+this.buffer+=``}}class o{constructor(){this.rootNode={
+children:[]},this.stack=[this.rootNode]}get top(){
+return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){
+this.top.children.push(e)}openNode(e){const t={kind:e,children:[]}
+;this.add(t),this.stack.push(t)}closeNode(){
+if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){
+for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}
+walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){
+return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),
+t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){
+"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{
+o._collapse(e)})))}}class c extends o{constructor(e){super(),this.options=e}
+addKeyword(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())}
+addText(e){""!==e&&this.add(e)}addSublanguage(e,t){const n=e.root
+;n.kind=t,n.sublanguage=!0,this.add(n)}toHTML(){
+return new l(this,this.options).value()}finalize(){return!0}}function g(e){
+return e?"string"==typeof e?e:e.source:null}
+const u=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,h="[a-zA-Z]\\w*",d="[a-zA-Z_]\\w*",f="\\b\\d+(\\.\\d+)?",p="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",m="\\b(0b[01]+)",b={
+begin:"\\\\[\\s\\S]",relevance:0},E={className:"string",begin:"'",end:"'",
+illegal:"\\n",contains:[b]},x={className:"string",begin:'"',end:'"',
+illegal:"\\n",contains:[b]},v={
+begin:/\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/
+},w=(e,t,n={})=>{const i=a({className:"comment",begin:e,end:t,contains:[]},n)
+;return i.contains.push(v),i.contains.push({className:"doctag",
+begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),i
+},y=w("//","$"),N=w("/\\*","\\*/"),R=w("#","$");var _=Object.freeze({
+__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:h,UNDERSCORE_IDENT_RE:d,
+NUMBER_RE:f,C_NUMBER_RE:p,BINARY_NUMBER_RE:m,
+RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",
+SHEBANG:(e={})=>{const t=/^#![ ]*\//
+;return e.binary&&(e.begin=((...e)=>e.map((e=>g(e))).join(""))(t,/.*\b/,e.binary,/\b.*/)),
+a({className:"meta",begin:t,end:/$/,relevance:0,"on:begin":(e,t)=>{
+0!==e.index&&t.ignoreMatch()}},e)},BACKSLASH_ESCAPE:b,APOS_STRING_MODE:E,
+QUOTE_STRING_MODE:x,PHRASAL_WORDS_MODE:v,COMMENT:w,C_LINE_COMMENT_MODE:y,
+C_BLOCK_COMMENT_MODE:N,HASH_COMMENT_MODE:R,NUMBER_MODE:{className:"number",
+begin:f,relevance:0},C_NUMBER_MODE:{className:"number",begin:p,relevance:0},
+BINARY_NUMBER_MODE:{className:"number",begin:m,relevance:0},CSS_NUMBER_MODE:{
+className:"number",
+begin:f+"(%|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)?",
+relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",
+begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[b,{begin:/\[/,end:/\]/,
+relevance:0,contains:[b]}]}]},TITLE_MODE:{className:"title",begin:h,relevance:0
+},UNDERSCORE_TITLE_MODE:{className:"title",begin:d,relevance:0},METHOD_GUARD:{
+begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:e=>Object.assign(e,{
+"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{
+t.data._beginMatch!==e[1]&&t.ignoreMatch()}})});function k(e,t){
+"."===e.input[e.index-1]&&t.ignoreMatch()}function M(e,t){
+t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",
+e.__beforeBegin=k,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,
+void 0===e.relevance&&(e.relevance=0))}function O(e,t){
+Array.isArray(e.illegal)&&(e.illegal=((...e)=>"("+e.map((e=>g(e))).join("|")+")")(...e.illegal))
+}function A(e,t){if(e.match){
+if(e.begin||e.end)throw Error("begin & end are not supported with match")
+;e.begin=e.match,delete e.match}}function L(e,t){
+void 0===e.relevance&&(e.relevance=1)}
+const I=["of","and","for","in","not","or","if","then","parent","list","value"]
+;function j(e,t,n="keyword"){const i={}
+;return"string"==typeof e?s(n,e.split(" ")):Array.isArray(e)?s(n,e):Object.keys(e).forEach((n=>{
+Object.assign(i,j(e[n],t,n))})),i;function s(e,n){
+t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split("|")
+;i[n[0]]=[e,B(n[0],n[1])]}))}}function B(e,t){
+return t?Number(t):(e=>I.includes(e.toLowerCase()))(e)?0:1}
+function T(e,{plugins:t}){function n(t,n){
+return RegExp(g(t),"m"+(e.case_insensitive?"i":"")+(n?"g":""))}class i{
+constructor(){
+this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}
+addRule(e,t){
+t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),
+this.matchAt+=(e=>RegExp(e.toString()+"|").exec("").length-1)(e)+1}compile(){
+0===this.regexes.length&&(this.exec=()=>null)
+;const e=this.regexes.map((e=>e[1]));this.matcherRe=n(((e,t="|")=>{let n=0
+;return e.map((e=>{n+=1;const t=n;let i=g(e),s="";for(;i.length>0;){
+const e=u.exec(i);if(!e){s+=i;break}
+s+=i.substring(0,e.index),i=i.substring(e.index+e[0].length),
+"\\"===e[0][0]&&e[1]?s+="\\"+(Number(e[1])+t):(s+=e[0],"("===e[0]&&n++)}return s
+})).map((e=>`(${e})`)).join(t)})(e),!0),this.lastIndex=0}exec(e){
+this.matcherRe.lastIndex=this.lastIndex;const t=this.matcherRe.exec(e)
+;if(!t)return null
+;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n]
+;return t.splice(0,n),Object.assign(t,i)}}class s{constructor(){
+this.rules=[],this.multiRegexes=[],
+this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){
+if(this.multiRegexes[e])return this.multiRegexes[e];const t=new i
+;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),
+t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){
+return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){
+this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){
+const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex
+;let n=t.exec(e)
+;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{
+const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}
+return n&&(this.regexIndex+=n.position+1,
+this.regexIndex===this.count&&this.considerAll()),n}}
+if(e.compilerExtensions||(e.compilerExtensions=[]),
+e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.")
+;return e.classNameAliases=a(e.classNameAliases||{}),function t(i,r){const l=i
+;if(i.isCompiled)return l
+;[A].forEach((e=>e(i,r))),e.compilerExtensions.forEach((e=>e(i,r))),
+i.__beforeBegin=null,[M,O,L].forEach((e=>e(i,r))),i.isCompiled=!0;let o=null
+;if("object"==typeof i.keywords&&(o=i.keywords.$pattern,
+delete i.keywords.$pattern),
+i.keywords&&(i.keywords=j(i.keywords,e.case_insensitive)),
+i.lexemes&&o)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ")
+;return o=o||i.lexemes||/\w+/,
+l.keywordPatternRe=n(o,!0),r&&(i.begin||(i.begin=/\B|\b/),
+l.beginRe=n(i.begin),i.endSameAsBegin&&(i.end=i.begin),
+i.end||i.endsWithParent||(i.end=/\B|\b/),
+i.end&&(l.endRe=n(i.end)),l.terminatorEnd=g(i.end)||"",
+i.endsWithParent&&r.terminatorEnd&&(l.terminatorEnd+=(i.end?"|":"")+r.terminatorEnd)),
+i.illegal&&(l.illegalRe=n(i.illegal)),
+i.contains||(i.contains=[]),i.contains=[].concat(...i.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>a(e,{
+variants:null},t)))),e.cachedVariants?e.cachedVariants:S(e)?a(e,{
+starts:e.starts?a(e.starts):null
+}):Object.isFrozen(e)?a(e):e))("self"===e?i:e)))),i.contains.forEach((e=>{t(e,l)
+})),i.starts&&t(i.starts,r),l.matcher=(e=>{const t=new s
+;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"
+}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"
+}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t})(l),l}(e)}function S(e){
+return!!e&&(e.endsWithParent||S(e.starts))}function P(e){const t={
+props:["language","code","autodetect"],data:()=>({detectedLanguage:"",
+unknownLanguage:!1}),computed:{className(){
+return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted(){
+if(!this.autoDetect&&!e.getLanguage(this.language))return console.warn(`The language "${this.language}" you specified could not be found.`),
+this.unknownLanguage=!0,s(this.code);let t={}
+;return this.autoDetect?(t=e.highlightAuto(this.code),
+this.detectedLanguage=t.language):(t=e.highlight(this.language,this.code,this.ignoreIllegals),
+this.detectedLanguage=this.language),t.value},autoDetect(){
+return!(this.language&&(e=this.autodetect,!e&&""!==e));var e},
+ignoreIllegals:()=>!0},render(e){return e("pre",{},[e("code",{
+class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{
+Component:t,VuePlugin:{install(e){e.component("highlightjs",t)}}}}const D={
+"after:highlightElement":({el:e,result:t,text:n})=>{const i=H(e)
+;if(!i.length)return;const a=document.createElement("div")
+;a.innerHTML=t.value,t.value=((e,t,n)=>{let i=0,a="";const r=[];function l(){
+return e.length&&t.length?e[0].offset!==t[0].offset?e[0].offset"}function c(e){
+a+=""+C(e)+">"}function g(e){("start"===e.event?o:c)(e.node)}
+for(;e.length||t.length;){let t=l()
+;if(a+=s(n.substring(i,t[0].offset)),i=t[0].offset,t===e){r.reverse().forEach(c)
+;do{g(t.splice(0,1)[0]),t=l()}while(t===e&&t.length&&t[0].offset===i)
+;r.reverse().forEach(o)
+}else"start"===t[0].event?r.push(t[0].node):r.pop(),g(t.splice(0,1)[0])}
+return a+s(n.substr(i))})(i,H(a),n)}};function C(e){
+return e.nodeName.toLowerCase()}function H(e){const t=[];return function e(n,i){
+for(let s=n.firstChild;s;s=s.nextSibling)3===s.nodeType?i+=s.nodeValue.length:1===s.nodeType&&(t.push({
+event:"start",offset:i,node:s}),i=e(s,i),C(s).match(/br|hr|img|input/)||t.push({
+event:"stop",offset:i,node:s}));return i}(e,0),t}const $={},U=e=>{
+console.error(e)},z=(e,...t)=>{console.log("WARN: "+e,...t)},K=(e,t)=>{
+$[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),$[`${e}/${t}`]=!0)
+},G=s,V=a,W=Symbol("nomatch");return(e=>{
+const n=Object.create(null),s=Object.create(null),a=[];let r=!0
+;const l=/(^(<[^>]+>|\t|)+|\n)/gm,o="Could not find the language '{}', did you forget to load/include a language module?",g={
+disableAutodetect:!0,name:"Plain text",contains:[]};let u={
+noHighlightRe:/^(no-?highlight)$/i,
+languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",
+tabReplace:null,useBR:!1,languages:null,__emitter:c};function h(e){
+return u.noHighlightRe.test(e)}function d(e,t,n,i){let s="",a=""
+;"object"==typeof t?(s=e,
+n=t.ignoreIllegals,a=t.language,i=void 0):(K("10.7.0","highlight(lang, code, ...args) has been deprecated."),
+K("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),
+a=e,s=t);const r={code:s,language:a};M("before:highlight",r)
+;const l=r.result?r.result:f(r.language,r.code,n,i)
+;return l.code=r.code,M("after:highlight",l),l}function f(e,t,s,l){
+function c(e,t){const n=v.case_insensitive?t[0].toLowerCase():t[0]
+;return Object.prototype.hasOwnProperty.call(e.keywords,n)&&e.keywords[n]}
+function g(){null!=R.subLanguage?(()=>{if(""===M)return;let e=null
+;if("string"==typeof R.subLanguage){
+if(!n[R.subLanguage])return void k.addText(M)
+;e=f(R.subLanguage,M,!0,_[R.subLanguage]),_[R.subLanguage]=e.top
+}else e=p(M,R.subLanguage.length?R.subLanguage:null)
+;R.relevance>0&&(O+=e.relevance),k.addSublanguage(e.emitter,e.language)
+})():(()=>{if(!R.keywords)return void k.addText(M);let e=0
+;R.keywordPatternRe.lastIndex=0;let t=R.keywordPatternRe.exec(M),n="";for(;t;){
+n+=M.substring(e,t.index);const i=c(R,t);if(i){const[e,s]=i
+;if(k.addText(n),n="",O+=s,e.startsWith("_"))n+=t[0];else{
+const n=v.classNameAliases[e]||e;k.addKeyword(t[0],n)}}else n+=t[0]
+;e=R.keywordPatternRe.lastIndex,t=R.keywordPatternRe.exec(M)}
+n+=M.substr(e),k.addText(n)})(),M=""}function h(e){
+return e.className&&k.openNode(v.classNameAliases[e.className]||e.className),
+R=Object.create(e,{parent:{value:R}}),R}function d(e,t,n){let s=((e,t)=>{
+const n=e&&e.exec(t);return n&&0===n.index})(e.endRe,n);if(s){if(e["on:end"]){
+const n=new i(e);e["on:end"](t,n),n.isMatchIgnored&&(s=!1)}if(s){
+for(;e.endsParent&&e.parent;)e=e.parent;return e}}
+if(e.endsWithParent)return d(e.parent,t,n)}function m(e){
+return 0===R.matcher.regexIndex?(M+=e[0],1):(I=!0,0)}function b(e){
+const n=e[0],i=t.substr(e.index),s=d(R,e,i);if(!s)return W;const a=R
+;a.skip?M+=n:(a.returnEnd||a.excludeEnd||(M+=n),g(),a.excludeEnd&&(M=n));do{
+R.className&&k.closeNode(),R.skip||R.subLanguage||(O+=R.relevance),R=R.parent
+}while(R!==s.parent)
+;return s.starts&&(s.endSameAsBegin&&(s.starts.endRe=s.endRe),
+h(s.starts)),a.returnEnd?0:n.length}let E={};function x(n,a){const l=a&&a[0]
+;if(M+=n,null==l)return g(),0
+;if("begin"===E.type&&"end"===a.type&&E.index===a.index&&""===l){
+if(M+=t.slice(a.index,a.index+1),!r){const t=Error("0 width match regex")
+;throw t.languageName=e,t.badRule=E.rule,t}return 1}
+if(E=a,"begin"===a.type)return function(e){
+const t=e[0],n=e.rule,s=new i(n),a=[n.__beforeBegin,n["on:begin"]]
+;for(const n of a)if(n&&(n(e,s),s.isMatchIgnored))return m(t)
+;return n&&n.endSameAsBegin&&(n.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),
+n.skip?M+=t:(n.excludeBegin&&(M+=t),
+g(),n.returnBegin||n.excludeBegin||(M=t)),h(n),n.returnBegin?0:t.length}(a)
+;if("illegal"===a.type&&!s){
+const e=Error('Illegal lexeme "'+l+'" for mode "'+(R.className||"")+'"')
+;throw e.mode=R,e}if("end"===a.type){const e=b(a);if(e!==W)return e}
+if("illegal"===a.type&&""===l)return 1
+;if(L>1e5&&L>3*a.index)throw Error("potential infinite loop, way more iterations than matches")
+;return M+=l,l.length}const v=N(e)
+;if(!v)throw U(o.replace("{}",e)),Error('Unknown language: "'+e+'"')
+;const w=T(v,{plugins:a});let y="",R=l||w;const _={},k=new u.__emitter(u);(()=>{
+const e=[];for(let t=R;t!==v;t=t.parent)t.className&&e.unshift(t.className)
+;e.forEach((e=>k.openNode(e)))})();let M="",O=0,A=0,L=0,I=!1;try{
+for(R.matcher.considerAll();;){
+L++,I?I=!1:R.matcher.considerAll(),R.matcher.lastIndex=A
+;const e=R.matcher.exec(t);if(!e)break;const n=x(t.substring(A,e.index),e)
+;A=e.index+n}return x(t.substr(A)),k.closeAllNodes(),k.finalize(),y=k.toHTML(),{
+relevance:Math.floor(O),value:y,language:e,illegal:!1,emitter:k,top:R}}catch(n){
+if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{
+msg:n.message,context:t.slice(A-100,A+100),mode:n.mode},sofar:y,relevance:0,
+value:G(t),emitter:k};if(r)return{illegal:!1,relevance:0,value:G(t),emitter:k,
+language:e,top:R,errorRaised:n};throw n}}function p(e,t){
+t=t||u.languages||Object.keys(n);const i=(e=>{const t={relevance:0,
+emitter:new u.__emitter(u),value:G(e),illegal:!1,top:g}
+;return t.emitter.addText(e),t})(e),s=t.filter(N).filter(k).map((t=>f(t,e,!1)))
+;s.unshift(i);const a=s.sort(((e,t)=>{
+if(e.relevance!==t.relevance)return t.relevance-e.relevance
+;if(e.language&&t.language){if(N(e.language).supersetOf===t.language)return 1
+;if(N(t.language).supersetOf===e.language)return-1}return 0})),[r,l]=a,o=r
+;return o.second_best=l,o}const m={"before:highlightElement":({el:e})=>{
+u.useBR&&(e.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/ /g,"\n"))
+},"after:highlightElement":({result:e})=>{
+u.useBR&&(e.value=e.value.replace(/\n/g," "))}},b=/^(<[^>]+>|\t)+/gm,E={
+"after:highlightElement":({result:e})=>{
+u.tabReplace&&(e.value=e.value.replace(b,(e=>e.replace(/\t/g,u.tabReplace))))}}
+;function x(e){let t=null;const n=(e=>{let t=e.className+" "
+;t+=e.parentNode?e.parentNode.className:"";const n=u.languageDetectRe.exec(t)
+;if(n){const t=N(n[1])
+;return t||(z(o.replace("{}",n[1])),z("Falling back to no-highlight mode for this block.",e)),
+t?n[1]:"no-highlight"}return t.split(/\s+/).find((e=>h(e)||N(e)))})(e)
+;if(h(n))return;M("before:highlightElement",{el:e,language:n}),t=e
+;const i=t.textContent,a=n?d(i,{language:n,ignoreIllegals:!0}):p(i)
+;M("after:highlightElement",{el:e,result:a,text:i
+}),e.innerHTML=a.value,((e,t,n)=>{const i=t?s[t]:n
+;e.classList.add("hljs"),i&&e.classList.add(i)})(e,n,a.language),e.result={
+language:a.language,re:a.relevance,relavance:a.relevance
+},a.second_best&&(e.second_best={language:a.second_best.language,
+re:a.second_best.relevance,relavance:a.second_best.relevance})}const v=()=>{
+v.called||(v.called=!0,
+K("10.6.0","initHighlighting() is deprecated. Use highlightAll() instead."),
+document.querySelectorAll("pre code").forEach(x))};let w=!1;function y(){
+"loading"!==document.readyState?document.querySelectorAll("pre code").forEach(x):w=!0
+}function N(e){return e=(e||"").toLowerCase(),n[e]||n[s[e]]}
+function R(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{
+s[e.toLowerCase()]=t}))}function k(e){const t=N(e)
+;return t&&!t.disableAutodetect}function M(e,t){const n=e;a.forEach((e=>{
+e[n]&&e[n](t)}))}
+"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{
+w&&y()}),!1),Object.assign(e,{highlight:d,highlightAuto:p,highlightAll:y,
+fixMarkup:e=>{
+return K("10.2.0","fixMarkup will be removed entirely in v11.0"),K("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"),
+t=e,
+u.tabReplace||u.useBR?t.replace(l,(e=>"\n"===e?u.useBR?" ":e:u.tabReplace?e.replace(/\t/g,u.tabReplace):e)):t
+;var t},highlightElement:x,
+highlightBlock:e=>(K("10.7.0","highlightBlock will be removed entirely in v12.0"),
+K("10.7.0","Please use highlightElement now."),x(e)),configure:e=>{
+e.useBR&&(K("10.3.0","'useBR' will be removed entirely in v11.0"),
+K("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559")),
+u=V(u,e)},initHighlighting:v,initHighlightingOnLoad:()=>{
+K("10.6.0","initHighlightingOnLoad() is deprecated. Use highlightAll() instead."),
+w=!0},registerLanguage:(t,i)=>{let s=null;try{s=i(e)}catch(e){
+if(U("Language definition for '{}' could not be registered.".replace("{}",t)),
+!r)throw e;U(e),s=g}
+s.name||(s.name=t),n[t]=s,s.rawDefinition=i.bind(null,e),s.aliases&&R(s.aliases,{
+languageName:t})},unregisterLanguage:e=>{delete n[e]
+;for(const t of Object.keys(s))s[t]===e&&delete s[t]},
+listLanguages:()=>Object.keys(n),getLanguage:N,registerAliases:R,
+requireLanguage:e=>{
+K("10.4.0","requireLanguage will be removed entirely in v11."),
+K("10.4.0","Please see https://github.com/highlightjs/highlight.js/pull/2844")
+;const t=N(e);if(t)return t
+;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))},
+autoDetection:k,inherit:V,addPlugin:e=>{(e=>{
+e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{
+e["before:highlightBlock"](Object.assign({block:t.el},t))
+}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{
+e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),a.push(e)},
+vuePlugin:P(e).VuePlugin}),e.debugMode=()=>{r=!1},e.safeMode=()=>{r=!0
+},e.versionString="10.7.2";for(const e in _)"object"==typeof _[e]&&t(_[e])
+;return Object.assign(e,_),e.addPlugin(m),e.addPlugin(D),e.addPlugin(E),e})({})
+}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);
+hljs.registerLanguage("apache",(()=>{"use strict";return e=>{const n={
+className:"number",begin:/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/}
+;return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,
+contains:[e.HASH_COMMENT_MODE,{className:"section",begin:/<\/?/,end:/>/,
+contains:[n,{className:"number",begin:/:\d{1,5}/
+},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",
+begin:/\w+/,relevance:0,keywords:{
+nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"
+},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},
+contains:[{className:"meta",begin:/\s\[/,end:/\]$/},{className:"variable",
+begin:/[\$%]\{/,end:/\}/,contains:["self",{className:"number",begin:/[$%]\d+/}]
+},n,{className:"number",begin:/\d+/},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}
+})());
+hljs.registerLanguage("bash",(()=>{"use strict";function e(...e){
+return e.map((e=>{return(s=e)?"string"==typeof s?s:s.source:null;var s
+})).join("")}return s=>{const n={},t={begin:/\$\{/,end:/\}/,contains:["self",{
+begin:/:-/,contains:[n]}]};Object.assign(n,{className:"variable",variants:[{
+begin:e(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},t]});const a={
+className:"subst",begin:/\$\(/,end:/\)/,contains:[s.BACKSLASH_ESCAPE]},i={
+begin:/<<-?\s*(?=\w+)/,starts:{contains:[s.END_SAME_AS_BEGIN({begin:/(\w+)/,
+end:/(\w+)/,className:"string"})]}},c={className:"string",begin:/"/,end:/"/,
+contains:[s.BACKSLASH_ESCAPE,n,a]};a.contains.push(c);const o={begin:/\$\(\(/,
+end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},s.NUMBER_MODE,n]
+},r=s.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10
+}),l={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,
+contains:[s.inherit(s.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{
+name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z._-]+\b/,
+keyword:"if then else elif fi for while in do done case esac function",
+literal:"true false",
+built_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"
+},contains:[r,s.SHEBANG(),l,o,s.HASH_COMMENT_MODE,i,c,{className:"",begin:/\\"/
+},{className:"string",begin:/'/,end:/'/},n]}}})());
+hljs.registerLanguage("c",(()=>{"use strict";function e(e){
+return((...e)=>e.map((e=>(e=>e?"string"==typeof e?e:e.source:null)(e))).join(""))("(",e,")?")
+}return t=>{const n=t.COMMENT("//","$",{contains:[{begin:/\\\n/}]
+}),r="[a-zA-Z_]\\w*::",a="(decltype\\(auto\\)|"+e(r)+"[a-zA-Z_]\\w*"+e("<[^<>]+>")+")",i={
+className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},s={className:"string",
+variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",
+contains:[t.BACKSLASH_ESCAPE]},{
+begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
+end:"'",illegal:"."},t.END_SAME_AS_BEGIN({
+begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},o={
+className:"number",variants:[{begin:"\\b(0b[01']+)"},{
+begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"
+},{
+begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
+}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{
+"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"
+},contains:[{begin:/\\\n/,relevance:0},t.inherit(s,{className:"meta-string"}),{
+className:"meta-string",begin:/<.*?>/},n,t.C_BLOCK_COMMENT_MODE]},l={
+className:"title",begin:e(r)+t.IDENT_RE,relevance:0
+},d=e(r)+t.IDENT_RE+"\\s*\\(",u={
+keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",
+built_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 _Bool complex _Complex imaginary _Imaginary",
+literal:"true false nullptr NULL"},m=[c,i,n,t.C_BLOCK_COMMENT_MODE,o,s],p={
+variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{
+beginKeywords:"new throw return else",end:/;/}],keywords:u,contains:m.concat([{
+begin:/\(/,end:/\)/,keywords:u,contains:m.concat(["self"]),relevance:0}]),
+relevance:0},_={className:"function",begin:"("+a+"[\\*&\\s]+)+"+d,
+returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:u,illegal:/[^\w\s\*&:<>.]/,
+contains:[{begin:"decltype\\(auto\\)",keywords:u,relevance:0},{begin:d,
+returnBegin:!0,contains:[l],relevance:0},{className:"params",begin:/\(/,
+end:/\)/,keywords:u,relevance:0,contains:[n,t.C_BLOCK_COMMENT_MODE,s,o,i,{
+begin:/\(/,end:/\)/,keywords:u,relevance:0,
+contains:["self",n,t.C_BLOCK_COMMENT_MODE,s,o,i]}]
+},i,n,t.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:u,
+disableAutodetect:!0,illegal:"",contains:[].concat(p,_,m,[c,{
+begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",
+end:">",keywords:u,contains:["self",i]},{begin:t.IDENT_RE+"::",keywords:u},{
+className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/,
+contains:[{beginKeywords:"final class struct"},t.TITLE_MODE]}]),exports:{
+preprocessor:c,strings:s,keywords:u}}}})());
+hljs.registerLanguage("coffeescript",(()=>{"use strict"
+;const e=["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"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"])
+;return r=>{const t={
+keyword:e.concat(["then","unless","until","loop","by","when","and","or","is","isnt","not"]).filter((i=["var","const","let","function","static"],
+e=>!i.includes(e))),literal:n.concat(["yes","no","on","off"]),
+built_in:a.concat(["npm","print"])};var i;const s="[A-Za-z$_][0-9A-Za-z$_]*",o={
+className:"subst",begin:/#\{/,end:/\}/,keywords:t
+},c=[r.BINARY_NUMBER_MODE,r.inherit(r.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",
+relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,
+contains:[r.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[r.BACKSLASH_ESCAPE]
+},{begin:/"""/,end:/"""/,contains:[r.BACKSLASH_ESCAPE,o]},{begin:/"/,end:/"/,
+contains:[r.BACKSLASH_ESCAPE,o]}]},{className:"regexp",variants:[{begin:"///",
+end:"///",contains:[o,r.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",
+relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+s
+},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{
+begin:"```",end:"```"},{begin:"`",end:"`"}]}];o.contains=c
+;const l=r.inherit(r.TITLE_MODE,{begin:s}),d="(\\(.*\\)\\s*)?\\B[-=]>",g={
+className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,
+end:/\)/,keywords:t,contains:["self"].concat(c)}]};return{name:"CoffeeScript",
+aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,
+contains:c.concat([r.COMMENT("###","###"),r.HASH_COMMENT_MODE,{
+className:"function",begin:"^\\s*"+s+"\\s*=\\s*"+d,end:"[-=]>",returnBegin:!0,
+contains:[l,g]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",
+begin:d,end:"[-=]>",returnBegin:!0,contains:[g]}]},{className:"class",
+beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{
+beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[l]},l]
+},{begin:s+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}})());
+hljs.registerLanguage("cpp",(()=>{"use strict";function e(e){
+return t("(",e,")?")}function t(...e){return e.map((e=>{
+return(t=e)?"string"==typeof t?t:t.source:null;var t})).join("")}return n=>{
+const r=n.COMMENT("//","$",{contains:[{begin:/\\\n/}]
+}),a="[a-zA-Z_]\\w*::",i="(decltype\\(auto\\)|"+e(a)+"[a-zA-Z_]\\w*"+e("<[^<>]+>")+")",s={
+className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},c={className:"string",
+variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",
+contains:[n.BACKSLASH_ESCAPE]},{
+begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
+end:"'",illegal:"."},n.END_SAME_AS_BEGIN({
+begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},o={
+className:"number",variants:[{begin:"\\b(0b[01']+)"},{
+begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"
+},{
+begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
+}],relevance:0},l={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{
+"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"
+},contains:[{begin:/\\\n/,relevance:0},n.inherit(c,{className:"meta-string"}),{
+className:"meta-string",begin:/<.*?>/},r,n.C_BLOCK_COMMENT_MODE]},d={
+className:"title",begin:e(a)+n.IDENT_RE,relevance:0
+},u=e(a)+n.IDENT_RE+"\\s*\\(",m={
+keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",
+built_in:"_Bool _Complex _Imaginary",
+_relevance_hints:["asin","atan2","atan","calloc","ceil","cosh","cos","exit","exp","fabs","floor","fmod","fprintf","fputs","free","frexp","auto_ptr","deque","list","queue","stack","vector","map","set","pair","bitset","multiset","multimap","unordered_set","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","unordered_map","unordered_multiset","unordered_multimap","priority_queue","make_pair","array","shared_ptr","abort","terminate","abs","acos","vfprintf","vprintf","vsprintf","endl","initializer_list","unique_ptr","complex","imaginary","std","string","wstring","cin","cout","cerr","clog","stdin","stdout","stderr","stringstream","istringstream","ostringstream"],
+literal:"true false nullptr NULL"},p={className:"function.dispatch",relevance:0,
+keywords:m,
+begin:t(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!while)/,n.IDENT_RE,(_=/\s*\(/,
+t("(?=",_,")")))};var _;const g=[p,l,s,r,n.C_BLOCK_COMMENT_MODE,o,c],b={
+variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{
+beginKeywords:"new throw return else",end:/;/}],keywords:m,contains:g.concat([{
+begin:/\(/,end:/\)/,keywords:m,contains:g.concat(["self"]),relevance:0}]),
+relevance:0},f={className:"function",begin:"("+i+"[\\*&\\s]+)+"+u,
+returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:m,illegal:/[^\w\s\*&:<>.]/,
+contains:[{begin:"decltype\\(auto\\)",keywords:m,relevance:0},{begin:u,
+returnBegin:!0,contains:[d],relevance:0},{begin:/::/,relevance:0},{begin:/:/,
+endsWithParent:!0,contains:[c,o]},{className:"params",begin:/\(/,end:/\)/,
+keywords:m,relevance:0,contains:[r,n.C_BLOCK_COMMENT_MODE,c,o,s,{begin:/\(/,
+end:/\)/,keywords:m,relevance:0,contains:["self",r,n.C_BLOCK_COMMENT_MODE,c,o,s]
+}]},s,r,n.C_BLOCK_COMMENT_MODE,l]};return{name:"C++",
+aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:m,illegal:"",
+classNameAliases:{"function.dispatch":"built_in"},
+contains:[].concat(b,f,p,g,[l,{
+begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",
+end:">",keywords:m,contains:["self",s]},{begin:n.IDENT_RE+"::",keywords:m},{
+className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/,
+contains:[{beginKeywords:"final class struct"},n.TITLE_MODE]}]),exports:{
+preprocessor:l,strings:c,keywords:m}}}})());
+hljs.registerLanguage("csharp",(()=>{"use strict";return e=>{const n={
+keyword:["abstract","as","base","break","case","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","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"]),
+built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],
+literal:["default","false","null","true"]},a=e.inherit(e.TITLE_MODE,{
+begin:"[a-zA-Z](\\.?\\w)*"}),i={className:"number",variants:[{
+begin:"\\b(0b[01']+)"},{
+begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{
+begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
+}],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]
+},t=e.inherit(s,{illegal:/\n/}),r={className:"subst",begin:/\{/,end:/\}/,
+keywords:n},l=e.inherit(r,{illegal:/\n/}),c={className:"string",begin:/\$"/,
+end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/
+},e.BACKSLASH_ESCAPE,l]},o={className:"string",begin:/\$@"/,end:'"',contains:[{
+begin:/\{\{/},{begin:/\}\}/},{begin:'""'},r]},d=e.inherit(o,{illegal:/\n/,
+contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},l]})
+;r.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.C_BLOCK_COMMENT_MODE],
+l.contains=[d,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.inherit(e.C_BLOCK_COMMENT_MODE,{
+illegal:/\n/})];const g={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]
+},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},a]
+},_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={
+begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],
+keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,
+contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{
+begin:"\x3c!--|--\x3e"},{begin:"?",end:">"}]}]
+}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",
+end:"$",keywords:{
+"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"
+}},g,i,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,
+illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"
+},a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",
+relevance:0,end:/[{;=]/,illegal:/[^\s:]/,
+contains:[a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{
+beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,
+contains:[a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",
+begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{
+className:"meta-string",begin:/"/,end:/"/}]},{
+beginKeywords:"new return throw await else",relevance:0},{className:"function",
+begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(<.+>\\s*)?\\(",returnBegin:!0,
+end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{
+beginKeywords:"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial",
+relevance:0},{begin:e.IDENT_RE+"\\s*(<.+>\\s*)?\\(",returnBegin:!0,
+contains:[e.TITLE_MODE,E],relevance:0},{className:"params",begin:/\(/,end:/\)/,
+excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,
+contains:[g,i,e.C_BLOCK_COMMENT_MODE]
+},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}})());
+hljs.registerLanguage("css",(()=>{"use strict"
+;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"],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"],o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],r=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","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-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","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","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-variant","font-variant-ligatures","font-variation-settings","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","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-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","src","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse()
+;return n=>{const a=(e=>({IMPORTANT:{className:"meta",begin:"!important"},
+HEXCOLOR:{className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"},
+ATTRIBUTE_SELECTOR_MODE:{className:"selector-attr",begin:/\[/,end:/\]/,
+illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}
+}))(n),l=[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE];return{name:"CSS",
+case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},
+classNameAliases:{keyframePosition:"selector-tag"},
+contains:[n.C_BLOCK_COMMENT_MODE,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/
+},n.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0
+},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0
+},a.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{
+begin:":("+i.join("|")+")"},{begin:"::("+o.join("|")+")"}]},{
+className:"attribute",begin:"\\b("+r.join("|")+")\\b"},{begin:":",end:"[;}]",
+contains:[a.HEXCOLOR,a.IMPORTANT,n.CSS_NUMBER_MODE,...l,{
+begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"
+},contains:[{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]
+},{className:"built_in",begin:/[\w-]+(?=\()/}]},{
+begin:(s=/@/,((...e)=>e.map((e=>(e=>e?"string"==typeof e?e:e.source:null)(e))).join(""))("(?=",s,")")),
+end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",
+begin:/@-?\w[\w]*(-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,
+relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",
+attribute:t.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"
+},...l,n.CSS_NUMBER_MODE]}]},{className:"selector-tag",
+begin:"\\b("+e.join("|")+")\\b"}]};var s}})());
+hljs.registerLanguage("diff",(()=>{"use strict";return e=>({name:"Diff",
+aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{
+begin:/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{
+begin:/^--- +\d+,\d+ +----$/}]},{className:"comment",variants:[{begin:/Index: /,
+end:/$/},{begin:/^index/,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^-{3}/,end:/$/
+},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/},{
+begin:/^diff --git/,end:/$/}]},{className:"addition",begin:/^\+/,end:/$/},{
+className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,
+end:/$/}]})})());
+hljs.registerLanguage("go",(()=>{"use strict";return e=>{const n={
+keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",
+literal:"true false iota nil",
+built_in:"append cap close complex copy imag len make new panic print println real recover delete"
+};return{name:"Go",aliases:["golang"],keywords:n,illegal:"",
+contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",
+variants:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{begin:"`",end:"`"}]},{
+className:"number",variants:[{begin:e.C_NUMBER_RE+"[i]",relevance:1
+},e.C_NUMBER_MODE]},{begin:/:=/},{className:"function",beginKeywords:"func",
+end:"\\s*(\\{|$)",excludeEnd:!0,contains:[e.TITLE_MODE,{className:"params",
+begin:/\(/,end:/\)/,keywords:n,illegal:/["']/}]}]}}})());
+hljs.registerLanguage("http",(()=>{"use strict";function e(...e){
+return e.map((e=>{return(n=e)?"string"==typeof n?n:n.source:null;var n
+})).join("")}return n=>{const a="HTTP/(2|1\\.[01])",s={className:"attribute",
+begin:e("^",/[A-Za-z][A-Za-z0-9-]*/,"(?=\\:\\s)"),starts:{contains:[{
+className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}
+},t=[s,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{
+name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+a+" \\d{3})",
+end:/$/,contains:[{className:"meta",begin:a},{className:"number",
+begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:t}},{
+begin:"(?=^[A-Z]+ (.*?) "+a+"$)",end:/$/,contains:[{className:"string",
+begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:a},{
+className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:t}
+},n.inherit(s,{relevance:0})]}}})());
+hljs.registerLanguage("ini",(()=>{"use strict";function e(e){
+return e?"string"==typeof e?e:e.source:null}function n(...n){
+return n.map((n=>e(n))).join("")}return s=>{const a={className:"number",
+relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{begin:s.NUMBER_RE}]
+},i=s.COMMENT();i.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];const t={
+className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/
+}]},r={className:"literal",begin:/\bon|off|true|false|yes|no\b/},l={
+className:"string",contains:[s.BACKSLASH_ESCAPE],variants:[{begin:"'''",
+end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'
+},{begin:"'",end:"'"}]},c={begin:/\[/,end:/\]/,contains:[i,r,t,l,a,"self"],
+relevance:0
+},g="("+[/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/].map((n=>e(n))).join("|")+")"
+;return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,
+contains:[i,{className:"section",begin:/\[+/,end:/\]+/},{
+begin:n(g,"(\\s*\\.\\s*",g,")*",n("(?=",/\s*=\s*[^#\s]/,")")),className:"attr",
+starts:{end:/$/,contains:[i,c,r,t,l,a]}}]}}})());
+hljs.registerLanguage("java",(()=>{"use strict"
+;var e="\\.([0-9](_*[0-9])*)",n="[0-9a-fA-F](_*[0-9a-fA-F])*",a={
+className:"number",variants:[{
+begin:`(\\b([0-9](_*[0-9])*)((${e})|\\.)?|(${e}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`
+},{begin:`\\b([0-9](_*[0-9])*)((${e})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{
+begin:`(${e})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{
+begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`
+},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{
+begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],
+relevance:0};return e=>{
+var n="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",s={
+className:"meta",begin:"@[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",
+contains:[{begin:/\(/,end:/\)/,contains:["self"]}]};const r=a;return{
+name:"Java",aliases:["jsp"],keywords:n,illegal:/<\/|#/,
+contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,
+relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{
+begin:/import java\.[a-z]+\./,keywords:"import",relevance:2
+},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{
+className:"class",beginKeywords:"class interface enum",end:/[{;=]/,
+excludeEnd:!0,relevance:1,keywords:"class interface enum",illegal:/[:"\[\]]/,
+contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{
+beginKeywords:"new throw return else",relevance:0},{className:"class",
+begin:"record\\s+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,excludeEnd:!0,
+end:/[{;=]/,keywords:n,contains:[{beginKeywords:"record"},{
+begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,
+contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,
+keywords:n,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE]
+},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"function",
+begin:"([\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*(<[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*(\\s*,\\s*[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",
+returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:n,contains:[{
+begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,
+contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,
+keywords:n,relevance:0,
+contains:[s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,r,e.C_BLOCK_COMMENT_MODE]
+},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},r,s]}}})());
+hljs.registerLanguage("javascript",(()=>{"use strict"
+;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"],s=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"])
+;function r(e){return t("(?=",e,")")}function t(...e){return e.map((e=>{
+return(n=e)?"string"==typeof n?n:n.source:null;var n})).join("")}return i=>{
+const c=e,o={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,
+isTrulyOpeningTag:(e,n)=>{const a=e[0].length+e.index,s=e.input[a]
+;"<"!==s?">"===s&&(((e,{after:n})=>{const a=""+e[0].slice(1)
+;return-1!==e.input.indexOf(a,n)})(e,{after:a
+})||n.ignoreMatch()):n.ignoreMatch()}},l={$pattern:e,keyword:n,literal:a,
+built_in:s},g="\\.([0-9](_?[0-9])*)",b="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",d={
+className:"number",variants:[{
+begin:`(\\b(${b})((${g})|\\.)?|(${g}))[eE][+-]?([0-9](_?[0-9])*)\\b`},{
+begin:`\\b(${b})\\b((${g})\\b|\\.)?|(${g})\\b`},{
+begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{
+begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{
+begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{
+begin:"\\b0[0-7]+n?\\b"}],relevance:0},E={className:"subst",begin:"\\$\\{",
+end:"\\}",keywords:l,contains:[]},u={begin:"html`",end:"",starts:{end:"`",
+returnEnd:!1,contains:[i.BACKSLASH_ESCAPE,E],subLanguage:"xml"}},_={
+begin:"css`",end:"",starts:{end:"`",returnEnd:!1,
+contains:[i.BACKSLASH_ESCAPE,E],subLanguage:"css"}},m={className:"string",
+begin:"`",end:"`",contains:[i.BACKSLASH_ESCAPE,E]},y={className:"comment",
+variants:[i.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{
+className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",
+end:"\\}",relevance:0},{className:"variable",begin:c+"(?=\\s*(-)|$)",
+endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]
+}),i.C_BLOCK_COMMENT_MODE,i.C_LINE_COMMENT_MODE]
+},N=[i.APOS_STRING_MODE,i.QUOTE_STRING_MODE,u,_,m,d,i.REGEXP_MODE]
+;E.contains=N.concat({begin:/\{/,end:/\}/,keywords:l,contains:["self"].concat(N)
+});const A=[].concat(y,E.contains),f=A.concat([{begin:/\(/,end:/\)/,keywords:l,
+contains:["self"].concat(A)}]),p={className:"params",begin:/\(/,end:/\)/,
+excludeBegin:!0,excludeEnd:!0,keywords:l,contains:f};return{name:"Javascript",
+aliases:["js","jsx","mjs","cjs"],keywords:l,exports:{PARAMS_CONTAINS:f},
+illegal:/#(?![$_A-z])/,contains:[i.SHEBANG({label:"shebang",binary:"node",
+relevance:5}),{label:"use_strict",className:"meta",relevance:10,
+begin:/^\s*['"]use (strict|asm)['"]/
+},i.APOS_STRING_MODE,i.QUOTE_STRING_MODE,u,_,m,y,d,{
+begin:t(/[{,\n]\s*/,r(t(/(((\/\/.*$)|(\/\*(\*[^/]|[^*])*\*\/))\s*)*/,c+"\\s*:"))),
+relevance:0,contains:[{className:"attr",begin:c+r("\\s*:"),relevance:0}]},{
+begin:"("+i.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",
+keywords:"return throw case",contains:[y,i.REGEXP_MODE,{className:"function",
+begin:"(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+i.UNDERSCORE_IDENT_RE+")\\s*=>",
+returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{
+begin:i.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0
+},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:l,contains:f}]}]
+},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{
+variants:[{begin:"<>",end:">"},{begin:o.begin,"on:begin":o.isTrulyOpeningTag,
+end:o.end}],subLanguage:"xml",contains:[{begin:o.begin,end:o.end,skip:!0,
+contains:["self"]}]}],relevance:0},{className:"function",
+beginKeywords:"function",end:/[{;]/,excludeEnd:!0,keywords:l,
+contains:["self",i.inherit(i.TITLE_MODE,{begin:c}),p],illegal:/%/},{
+beginKeywords:"while if switch catch for"},{className:"function",
+begin:i.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",
+returnBegin:!0,contains:[p,i.inherit(i.TITLE_MODE,{begin:c})]},{variants:[{
+begin:"\\."+c},{begin:"\\$"+c}],relevance:0},{className:"class",
+beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"[\]]/,contains:[{
+beginKeywords:"extends"},i.UNDERSCORE_TITLE_MODE]},{begin:/\b(?=constructor)/,
+end:/[{;]/,excludeEnd:!0,contains:[i.inherit(i.TITLE_MODE,{begin:c}),"self",p]
+},{begin:"(get|set)\\s+(?="+c+"\\()",end:/\{/,keywords:"get set",
+contains:[i.inherit(i.TITLE_MODE,{begin:c}),{begin:/\(\)/},p]},{begin:/\$[(.]/}]
+}}})());
+hljs.registerLanguage("json",(()=>{"use strict";return n=>{const e={
+literal:"true false null"
+},i=[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],a=[n.QUOTE_STRING_MODE,n.C_NUMBER_MODE],l={
+end:",",endsWithParent:!0,excludeEnd:!0,contains:a,keywords:e},t={begin:/\{/,
+end:/\}/,contains:[{className:"attr",begin:/"/,end:/"/,
+contains:[n.BACKSLASH_ESCAPE],illegal:"\\n"},n.inherit(l,{begin:/:/
+})].concat(i),illegal:"\\S"},s={begin:"\\[",end:"\\]",contains:[n.inherit(l)],
+illegal:"\\S"};return a.push(t,s),i.forEach((n=>{a.push(n)})),{name:"JSON",
+contains:a,keywords:e,illegal:"\\S"}}})());
+hljs.registerLanguage("kotlin",(()=>{"use strict"
+;var e="\\.([0-9](_*[0-9])*)",n="[0-9a-fA-F](_*[0-9a-fA-F])*",a={
+className:"number",variants:[{
+begin:`(\\b([0-9](_*[0-9])*)((${e})|\\.)?|(${e}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`
+},{begin:`\\b([0-9](_*[0-9])*)((${e})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{
+begin:`(${e})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{
+begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`
+},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{
+begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],
+relevance:0};return e=>{const n={
+keyword:"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",
+built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",
+literal:"true false null"},i={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"
+},s={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},t={
+className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string",
+variants:[{begin:'"""',end:'"""(?=[^"])',contains:[t,s]},{begin:"'",end:"'",
+illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,
+contains:[e.BACKSLASH_ESCAPE,t,s]}]};s.contains.push(r);const l={
+className:"meta",
+begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"
+},c={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,
+end:/\)/,contains:[e.inherit(r,{className:"meta-string"})]}]
+},o=a,b=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),E={
+variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,
+contains:[]}]},d=E;return d.variants[1].contains=[E],E.variants[1].contains=[d],
+{name:"Kotlin",aliases:["kt","kts"],keywords:n,
+contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",
+begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,b,{className:"keyword",
+begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",
+begin:/@\w+/}]}},i,l,c,{className:"function",beginKeywords:"fun",end:"[(]|$",
+returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{
+begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,
+contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin:/,end:/>/,
+keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,
+endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,
+endsWithParent:!0,contains:[E,e.C_LINE_COMMENT_MODE,b],relevance:0
+},e.C_LINE_COMMENT_MODE,b,l,c,r,e.C_NUMBER_MODE]},b]},{className:"class",
+beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,
+illegal:"extends implements",contains:[{
+beginKeywords:"public protected internal private constructor"
+},e.UNDERSCORE_TITLE_MODE,{className:"type",begin:/,end:/>/,excludeBegin:!0,
+excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,
+excludeBegin:!0,returnEnd:!0},l,c]},r,{className:"meta",begin:"^#!/usr/bin/env",
+end:"$",illegal:"\n"},o]}}})());
+hljs.registerLanguage("less",(()=>{"use strict"
+;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"],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"],o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],n=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","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-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","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","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-variant","font-variant-ligatures","font-variation-settings","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","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-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","src","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse(),r=i.concat(o)
+;return a=>{const s=(e=>({IMPORTANT:{className:"meta",begin:"!important"},
+HEXCOLOR:{className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"},
+ATTRIBUTE_SELECTOR_MODE:{className:"selector-attr",begin:/\[/,end:/\]/,
+illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}
+}))(a),l=r,d="([\\w-]+|@\\{[\\w-]+\\})",c=[],g=[],b=e=>({className:"string",
+begin:"~?"+e+".*?"+e}),m=(e,t,i)=>({className:e,begin:t,relevance:i}),u={
+$pattern:/[a-z-]+/,keyword:"and or not only",attribute:t.join(" ")},p={
+begin:"\\(",end:"\\)",contains:g,keywords:u,relevance:0}
+;g.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,b("'"),b('"'),a.CSS_NUMBER_MODE,{
+begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",
+excludeEnd:!0}
+},s.HEXCOLOR,p,m("variable","@@?[\\w-]+",10),m("variable","@\\{[\\w-]+\\}"),m("built_in","~?`[^`]*?`"),{
+className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0
+},s.IMPORTANT);const f=g.concat({begin:/\{/,end:/\}/,contains:c}),h={
+beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"
+}].concat(g)},w={begin:d+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0,
+contains:[{begin:/-(webkit|moz|ms|o)-/},{className:"attribute",
+begin:"\\b("+n.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0,
+illegal:"[<=$]",relevance:0,contains:g}}]},v={className:"keyword",
+begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",
+starts:{end:"[;{}]",keywords:u,returnEnd:!0,contains:g,relevance:0}},y={
+className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{
+begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:f}},k={variants:[{
+begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:d,end:/\{/}],returnBegin:!0,
+returnEnd:!0,illegal:"[<='$\"]",relevance:0,
+contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,h,m("keyword","all\\b"),m("variable","@\\{[\\w-]+\\}"),{
+begin:"\\b("+e.join("|")+")\\b",className:"selector-tag"
+},m("selector-tag",d+"%?",0),m("selector-id","#"+d),m("selector-class","\\."+d,0),m("selector-tag","&",0),s.ATTRIBUTE_SELECTOR_MODE,{
+className:"selector-pseudo",begin:":("+i.join("|")+")"},{
+className:"selector-pseudo",begin:"::("+o.join("|")+")"},{begin:"\\(",end:"\\)",
+contains:f},{begin:"!important"}]},E={begin:`[\\w-]+:(:)?(${l.join("|")})`,
+returnBegin:!0,contains:[k]}
+;return c.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,v,y,E,w,k),{
+name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:c}}})());
+hljs.registerLanguage("lua",(()=>{"use strict";return e=>{
+const t="\\[=*\\[",a="\\]=*\\]",n={begin:t,end:a,contains:["self"]
+},o=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[",a,{contains:[n],
+relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,
+literal:"true false nil",
+keyword:"and break do else elseif end for goto if in local not or repeat return then until while",
+built_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"
+},contains:o.concat([{className:"function",beginKeywords:"function",end:"\\)",
+contains:[e.inherit(e.TITLE_MODE,{
+begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",
+begin:"\\(",endsWithParent:!0,contains:o}].concat(o)
+},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",
+begin:t,end:a,contains:[n],relevance:5}])}}})());
+hljs.registerLanguage("makefile",(()=>{"use strict";return e=>{const i={
+className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",
+contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%\^\+\*]/}]},a={className:"string",
+begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,i]},n={className:"variable",
+begin:/\$\([\w-]+\s/,end:/\)/,keywords:{
+built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"
+},contains:[i]},s={begin:"^"+e.UNDERSCORE_IDENT_RE+"\\s*(?=[:+?]?=)"},r={
+className:"section",begin:/^[^\s]+:/,end:/$/,contains:[i]};return{
+name:"Makefile",aliases:["mk","mak","make"],keywords:{$pattern:/[\w-]+/,
+keyword:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath"
+},contains:[e.HASH_COMMENT_MODE,i,a,n,s,{className:"meta",begin:/^\.PHONY:/,
+end:/$/,keywords:{$pattern:/[\.\w]+/,"meta-keyword":".PHONY"}},r]}}})());
+hljs.registerLanguage("xml",(()=>{"use strict";function e(e){
+return e?"string"==typeof e?e:e.source:null}function n(e){return a("(?=",e,")")}
+function a(...n){return n.map((n=>e(n))).join("")}function s(...n){
+return"("+n.map((n=>e(n))).join("|")+")"}return e=>{
+const t=a(/[A-Z_]/,a("(",/[A-Z0-9_.-]*:/,")?"),/[A-Z0-9_.-]*/),i={
+className:"symbol",begin:/&[a-z]+;|[0-9]+;|[a-f0-9]+;/},r={begin:/\s/,
+contains:[{className:"meta-keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]
+},c=e.inherit(r,{begin:/\(/,end:/\)/}),l=e.inherit(e.APOS_STRING_MODE,{
+className:"meta-string"}),g=e.inherit(e.QUOTE_STRING_MODE,{
+className:"meta-string"}),m={endsWithParent:!0,illegal:/,relevance:0,
+contains:[{className:"attr",begin:/[A-Za-z0-9._:-]+/,relevance:0},{begin:/=\s*/,
+relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,
+end:/"/,contains:[i]},{begin:/'/,end:/'/,contains:[i]},{begin:/[^\s"'=<>`]+/}]}]
+}]};return{name:"HTML, XML",
+aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],
+case_insensitive:!0,contains:[{className:"meta",begin://,
+relevance:10,contains:[r,g,l,c,{begin:/\[/,end:/\]/,contains:[{className:"meta",
+begin://,contains:[r,c,g,l]}]}]},e.COMMENT(//,{
+relevance:10}),{begin://,relevance:10},i,{
+className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",
+begin:/
+
+
+ {preview}
+
+
+